Язык программирования TurboPascal
- Григоренко Г. Н.
- Просмотров: 4627
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 представлены ниже:
Условный оператор работает следующим образом. Сначала вычисляется условное выражение < условие >. Если результат есть True (истина), то выполняется < оператор 1 > (после слова Then), а < оператор 2 > пропускается. Если результат есть False (ложь), то < оператор 1 > пропускается, а выполняется < оператор 2 > (после слова Else). Перед Else никогда не ставится точка с запятой, поскольку это еще не конец оператора 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. Вычислить значение функции, заданной неравенствами
Результаты работы программы:
Введите значения x:0.5
Значение у равно: 1.00
ЗАДАЧА 2. Написать программу решения квадратного уравнения. Если дискриминант меньше нуля, то выводить соответствующее сообщение.
Результаты работы программы:
Решение квадратного уравнения
Введите значения коэффициентов a,b,c:3 1 6
Уравнение не имеет корней.
В операторе If может быть использован не только составной оператор, но и любой структурированный оператор. В качестве такого оператора может использоваться и рассмотренный нами условный оператор If. В этом случае говорят о вложенных операторах If.
Пример.
if условие then | |||||
begin | ![]() |
Операторные скобки | |||
оператор; | ![]() |
вложенный оператор IF, неполная форма |
|||
if условие then опеатор | |||||
else оператор; | |||||
end | |||||
else | |||||
begin | ![]() |
Операторные скобки | |||
оператор; | ![]() |
вложенный оператор 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. Усовершенствованная программа решения квадратного уравнения.
Результаты работы программы:
Условный оператор выбора Case
Оператор выбора является обобщением оператора If и используется в тех случаях, когда необходимо выполнить только один оператор из совокупности операторов в зависимости от значения ключа выбора.
В качестве ключа выбора используется выражение, которое располагается между зарезервированными словами Case и of. Выражение может быть целого, логического и символьного типов. Выражение не может иметь тип Real, String.
Формат оператора:
Здесь Сase (в случае), of (из), Else (иначе), End (конец) являются зарезервированными словами.
Ключ выбора – это выражение любого типа кроме Real и String.
Константа1 – константа того же типа, что и выражение .
Оператор1 – произвольный оператор.
Оператор выбора действует следующим образом. Вначале вычисляется выражение <ключ выбора>, а затем в последовательности операторов отыскивается такой, которому предшествует константа, равная вычисленному значению <ключ выбора>. Найденный оператор выполняется, после чего оператор выбора завершает свою работу (управление передается на end). Если в списке констант не будет найдена константа, соответствующая вычисленному значению ключа выбора, управление передается оператору, стоящему за словом Else.
Часть Else <оператора> можно опустить, тогда при отсутствии в списке констант нужной константы ничего не происходит, и оператор выбора просто завершает свою работу.
ЗАДАЧА 5. Написать программу простого калькулятора.
Результаты работы программы:
Введите операнды x,y:4 2
Введите операцию (+,-,*,/):*
Результат равен= 8.00
В программе ключом выбора является переменная символьного типа. В зависимости от введенного значения символов (+, -, *, /) выполняется одно из арифметических действий: сложение, вычитание, умножение или деление. Если в качестве делителя будет введен нуль, то деление невозможно и выдается сообщение «Деление на нуль». Если будет введен какой-либо другой символ, то результатом будет сообщение «Действие не предусмотрено!». Если введены допустимые операции, то выдается результат.
ЗАДАЧА 6. Написать программу, которая запрашивает у пользователя номер дня недели, затем выводит название дня недели или сообщение об ошибке, если введены неверные данные.
Результаты работы программы:
Введите номер дня недели:1
Понедельник
Ни одна константа не должна совпадать с другой. Если для нескольких констант необходимо выполнить один и тот же оператор, то их можно перечислить через запятую, например