Turbo Pascal. Структурированные операторы

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

  • составной оператор;
  • условный оператор If;
  • условный оператор Case;
  • оператор цикла Repeat;
  • оператор цикла While;
  • оператор цикла For.

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

Часто необходимо, чтобы по отношению к какому-то действию несколько операторов воспринимались в программе как один оператор. Такой оператор может быть получен, если необходимую последовательность операторов объединить операторными скобками. Служебные слова Begin и End называются операторными скобками.

Формат оператора:

Begin 

оператор №1; 

оператор №2; 

оператор №3; 

... 

оператор № n-1; 

оператор № n;  End;

Слово Begin играет роль открывающей скобки, слово End – роль закрывающей скобки.

Составной оператор воспринимается как единый оператор. Его можно вставлять в любое место программы, где допускается только один оператор.

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

В последующих разделах смысл и назначение составного оператора будут проиллюстрированы на многочисленных примерах.

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

Оператор If реализует алгоритмическую конструкцию «Решение» и позволяет изменить порядок выполнения операторов в зависимости от истинности или ложности некоторого условия. Формат оператора может быть записан в двух формах: полной и неполной форме.

Формат оператора в полной форме:

 If<условие> Then<оператор 1> Else<оператор 2> 

Формат оператора в неполной форме:

 If<условие>Then<оператор 1> 

 If (если), Then (тогда), Else (иначе) – зарезервированные слова.

Блок-схемы оператора if представлены ниже:

Блок-схема условного оператора If в полной форме

Условный оператор работает следующим образом. Сначала вычисляется условное выражение < условие >. Если результат есть True (истина), то выполняется < оператор 1 > (после слова Then), а < оператор 2 > пропускается. Если результат есть False (ложь), то < оператор 1 > пропускается, а выполняется < оператор 2 > (после слова Else). Перед Else никогда не ставится точка с запятой, поскольку это еще не конец оператора If.

Блок-схема оператора If неполной формы

Часть Else <оператор 2> условного оператора If может быть опущена. Если < условие > оператора If принимает значение True, то выполняется <оператор 1>, в противном случае этот оператор пропускается. В этом случае формат условного оператора имеет неполную форму:

Сравним две конструкции:

 If <условие>Then<оператор 1>; 

 If <условие>Then<оператор 1>; <оператор 2>; 

В первой строке <оператор 1> или выполняется, или не выполняется в зависимости от выполнения <условия>. Во второй строке <оператор 2> выполняется всегда, поскольку после <оператора 1> стоит разделитель «;» и все что стоит поле разделителя считается другим оператором. Поэтому в соответствии с форматом оператора If после зарезервированных слов Then и Else может стоять всего лишь один оператор.

Пример:

 If a > 0 Then b:=1; 

 If a > 0 Then b:=1; a:=b; {оператор a:=b; выполняется всегда} 

Если же необходимо выполнить после Then и Else не один, а несколько операторов, то следует поставить операторные скобки, т.е. использовать составной оператор.

В этом случае оператор If будет иметь следующий вид:

 If<условие>Then 

 begin 

 оператор 11; 

 ... 

 оператор 1n; 

 end 

 Else 

 begin 

 оператор 21; 

 ... 

 оператор 2n; 

 end; 

Пример.

If a>0 Then begin b:=1; a:=b; end;

ЗАДАЧА 1. Вычислить значение функции, заданной неравенствами

y=x+1 при x<0;
y=2∙x при x>0.
program a5;
var
x,y:real;
begin
write(‘Введите значение x: ’);
readln(x);
if x
writeln(‘Значение у равно: ’, y:6:2)
end.

Результаты работы программы:

 Введите значения x:0.5 

 Значение у равно: 1.00 

ЗАДАЧА 2. Написать программу решения квадратного уравнения. Если дискриминант меньше нуля, то выводить соответствующее сообщение.

Program a6;
var
a,b,c:real; {коэффициенты уравнения}
x1,x2:real; {корни уравнения}
d:real; {дискриминант}
begin
Writeln(‘Решение квадратного уравнения’:50);
Write(‘Введите значения коэффициентов a,b,c:’);
Readln(a,b,c); {ввод коэффициентов}
d:=b*b-4*a*c;
if (d<0) then
Writeln(‘Уравнение не имеет корней.’)
else
begin {операторные скобки}
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a);
WriteLn(‘Корни уравнения: ’, x1:8:2,x2:8:2);
end;
end.

Результаты работы программы:

 Решение квадратного уравнения 

 Введите значения коэффициентов a,b,c:3 1 6 

 Уравнение не имеет корней. 

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

Пример.

 if условие then 
 begin  vlogennie operatori2 Операторные скобки
     оператор;  vlogennie operatori1   вложенный
оператор IF,
неполная форма
     if условие then опеатор 
     else оператор; 
 end 
 else 
 begin  vlogennie operatori2 Операторные скобки
     оператор;  vlogennie operatori1 вложенный
оператор IF,
неполная форма
     if условие 
     then оператор; 
  end;     

При работе с вложенными операторамиif следует учитывать следующие правила:

  • перед зарезервированным словом else символ «;» никогда не ставится;
  • зарезервированное слово else всегда связывается с ближайшим перед ним стоящим зарезервированным словом then.

ЗАДАЧА 3. Усовершенствуем программу решения квадратного уравнения (ЗАДАЧА 2). При значении коэффициента a=0 уравнение вырождается. В программе этот факт не учитывался, что вызовет фатальную ошибку при исполнении программы (деление на нуль). Для того чтобы исключить деление на нуль, выполним проверку значения коэффициента а после его ввода оператором Readln(a,b,c).

Поскольку переменная a объявлена в программе как переменная вещественного типа, ее численное значение в машине представлено не точно, с некоторой погрешностью. Поэтому запись типа

 If a=0 then ...       является ошибочной. По определению значение переменной не может быть точно рано нулю

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

 If a<>0 then ...  Знак равенства при сравнении вещественных чисел никогда не применяется. При достаточно малых значениях a возможно переполнение.
 If round(a)=0 then ...  Вещественное число округляется до ближайшего целого числа (функция Round()).
 If a>0.0001 then ...  Это наилучший вариант. Задается относительная погрешность числа a.

 

ЗАДАЧА 4. Усовершенствованная программа решения квадратного уравнения.

Program a7;Var
a,b,c:real; {коэффициенты уравнения}
x1,x2:real; {корни уравнения}
d:real; {дискриминант}
begin
Writeln(‘Решение квадратного уравнения’:50);
Write(‘Введите значения коэффициентов a,b,c: ’);
Readln(a,b,c); {ввод коэффициентов}
if round(a)<>0 then
begin
d:=b*b-4*a*c;
if d<0 then
Writeln(‘Уравнение не имеет корней.’)
else
begin{операторные скобки}
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a);
WriteLN(‘Корни уравнения: ’, x1:8:2,x2:8:2);
end;
end
else
Writeln(‘Деление на нуль.’);
end.

Результаты работы программы:

Решение квадратного уравнения
Введите значения коэффициентов a,b,c:0 1 6
Деление на нуль.

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

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

В качестве ключа выбора используется выражение, которое располагается между зарезервированными словами Case и of. Выражение может быть целого, логического и символьного типов. Выражение не может иметь тип Real, String.

Формат оператора:

Case of '<ключ выбора>'
константа1:оператор 1;
константа2:оператор 2;
константа3:оператор 3;
...
константаN-1:оператор N-1;
константаN:оператор Nn;
Else оператор
End;

Работа оператора Case

Здесь Сase (в случае), of (из), Else (иначе), End (конец) являются зарезервированными словами.

Ключ выбора – это выражение любого типа кроме Real и String.

 Константа1 – константа того же типа, что и выражение .

 Оператор1 – произвольный оператор.

Оператор выбора действует следующим образом. Вначале вычисляется выражение <ключ выбора>, а затем в последовательности операторов отыскивается такой, которому предшествует константа, равная вычисленному значению <ключ выбора>. Найденный оператор выполняется, после чего оператор выбора завершает свою работу (управление передается на end). Если в списке констант не будет найдена константа, соответствующая вычисленному значению ключа выбора, управление передается оператору, стоящему за словом Else.

Часть Else <оператора> можно опустить, тогда при отсутствии в списке констант нужной константы ничего не происходит, и оператор выбора просто завершает свою работу.

ЗАДАЧА 5. Написать программу простого калькулятора.

Program a8;
var
x,y:real;
z:real; {результат}
op:char; {ключ выбора}
begin
Write(‘Введите операнды x,y: ’);
Readln(x,y);
Write(‘Введите операцию(+,-,*,/): ’);
Readln(op);
case op of
‘+’:z:=x+y;
‘-‘:z:=x-y;
‘*‘:z:=x*y;
‘/‘:if y0 then z:=x/y
Elsewriteln(‘Деление на нуль’);
Else writeln(‘Действие не предусмотрено!’);
end; {op} {так можно пометить, «чей» end}
writeln(‘Результат равен=’,z:8:2);
end.

Результаты работы программы:

 Введите операнды x,y:4 2 

 Введите операцию (+,-,*,/):* 

 Результат равен= 8.00 

В программе ключом выбора является переменная символьного типа. В зависимости от введенного значения символов (+, -, *, /) выполняется одно из арифметических действий: сложение, вычитание, умножение или деление. Если в качестве делителя будет введен нуль, то деление невозможно и выдается сообщение «Деление на нуль». Если будет введен какой-либо другой символ, то результатом будет сообщение «Действие не предусмотрено!». Если введены допустимые операции, то выдается результат.

ЗАДАЧА 6. Написать программу, которая запрашивает у пользователя номер дня недели, затем выводит название дня недели или сообщение об ошибке, если введены неверные данные.

Program a9;
Var
n: integer; {номер дня недели}
Begin
write(‘Введите номер дня недели:’);
readln(n);
case n of
1: writeln(‘Понедельник’);
2: writeln(‘Вторник’);
3: writeln(‘Среда’);
4: writeln(‘Четверг’);
5: writeln(‘Пятница’);
6: writeln(‘Суббота’);
7: writeln(‘Воскресенье’);
else write(‘вы ошиблись!’)
end; {n}
end.

Результаты работы программы:

 Введите номер дня недели:1 

 Понедельник 

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

case n of
1,3,5,7,9: writeln(‘Это нечетные цифры’);
2,4,6,8,10: writeln(‘Это четные цифры’);
end;
 

Добавить комментарий
  • Комментарии не найдены