Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава IV Операторы Delphi.doc
Скачиваний:
5
Добавлен:
01.05.2025
Размер:
102.4 Кб
Скачать

Оператор вызова процедуры или функции

Комментарии

При написании очень больших программ трудно постоянно держать в памяти для чего был написан тот или иной участок кода. В таких случаях возникает потребность во вставке в текст кода небольших поясняющих предложений – комментариев. В Object Pascal любой текст заключенный между символами { и } или (* и *) считается комментарием и компилятор не обращает на него никакого внимания. (Между скобкой и звездочкой не должно быть пробелов).

Begin

{Начало программы}

x := Sin(3.1415);

{Вычисление ArcCos числа}

arccos:=ArcTan(Sqrt(1-Sqr(x))/x) + Pi*Byte(x<0);

(* Вычисление гиперболического косинуса числа *)

ch:=(exp(x) + exp(-x))/2;

End;

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

II Сложные (составные) операторы Cоставной оператор

Несколько команд могут быть записаны в одной строке.

begin

intCount :=12; a := 34; b:=a/intCount; c:=(a+b)/a; end;

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

Структуру условного оператора в общем виде можно записать следующим образом:

IF <условие> THEN <оператор1> ELSE <оператор2>

где IF, THEN, ELSE – служебные слова (Если … То … Иначе …); <Условие> произвольное выражение или переменная логического типа; <оператор1>, <оператор2> – произвольные операторы языка Object Pascal. Следует отметить, что если оператор1 является составным, а затем идет служебное слово else, то после завершающего его служебного слова end точка с запятой не ставится. Если же служебное слово else не используется, то точка с запятой должна быть.

Как же действует этот оператор? Вначале вычисляется значение условного выражения которое стоит между служебными словами IF и THEN. Если получается результат «истина» (True), то выполняется оператор следующий за служебным словом THEN, т.е. <оператор1>, а <оператор2> пропускается. Если же результатом вычисления будет «ложь» (False), то наоборот <оператор1> будет пропущен, а <оператор2> будет выполнен. Если вместо логического выражения будет использована переменная логического типа, то если она будет иметь значение True, то выполнится <оператор1>, а если ее значение будет равно False, то <оператор2>. Напишем оператор смены значения логической переменной.

Var k : Boolean;

Begin

IF k Then k := False Else k := True;

End;

если переменная k имеет значение «истина», то ей присваивается значение «ложно» и наоборот.

В качестве более серьезного примера использования условного оператора рассмотрим функцию, которая вычисляет арккосинус числа. Как известно, косинус не может быть больше единицы, поэтому арккосинус от числа больше единицы не существует. Именно это условие и проверяется в первом условном операторе. Если передаваемое в функцию число больше единицы, то логическое выражение принимает значение «истина» (True) и выполняется оператор стоящий после служебного слова ELSE.

Function arccos(x : Extended) : Extended;

Begin

IF ABS(x) > 1 THEN begin

MessageDlg('Wrong Number', mtConformation, mbOk); Exit;

end;

IF x=0 THEN arccos:=pi/2

ELSE arccos:=ArcTan(Sqrt(1-Sqr(x))/x) + Pi*Byte(x<0);

End;

Заметим, что наличие служебного слова ELSE вовсе не обязательно, что и показано в этом примере. Такая ситуация встречается, если какое-либо действие требуется выполнить если условие истинно, а если условие не истинно, то просто пропустить его и продолжить выполнение программы. При выполнении условия ABS(x) > 1 происходит выдача сообщения об ошибке и программа останавливается. Ясно, что если это условие не выполняется, то программа будет выполнять следующий оператор, поэтому наличие служебного слова ELSE здесь излишне. Второй условный оператор позволяет избежать ошибки при делении на нуль. Здесь уже служебное слово ELSE необходимо.

Так как <оператор1> и <оператор2> суть произвольные операторы, то они могут содержать в себе другие условные операторы, таким образом реализуется структура вложенных логических операторов.

IF a > b THEN begin

IF a > c Then

begin

max := a;

IF b > c then min := c

else min := b; end

Else begin max := c; min := b; end;

end {THEN}

ELSE begin

IF b > c Then

begin

max := a;

IF b > c then min := c

else min := b; end

Else begin max := c; min := b; end;

end {ELSE}

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

IF a > b THEN

IF a > c Then max := a

ELSE max := b;

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

IF a > b THEN begin

IF a > c Then max := a

end

ELSE max := b;

Символ " ; " не ставится перед служебным словом Else. Как видно из примера Delphi понимает знаки арифметических действий: плюс + , минус – , умножить *, разделить / . При записи математических выражений действует обычное правило очередности выполнения вычислений. Первыми производятся вычисления в скобках, умножение (деление) выполняются раньше сложения (вычитания).

В условном операторе, как мы видели выше, используются логические выражения. По каким же правилам строятся эти выражения в Delphi? Это прежде всего операции сравнения вида a > b или c <= d. Запишем все операции сравнения используемые в Delphi.

> – больше; < – меньше;

<> – не равно, тождественен математическому знаку ;

<= – меньше или равно, тождественен математическому знаку ;

>= – больше или равно, тождественен математическому знаку ..

Примеры: a <> b; count >=10; c+d < 8+k;

Кроме этого существуют операции, применимые к логическим переменным, это

not – логическое НЕ

and – логическое И

or – логическое ИЛИ

xor – исключительное ИЛИ.

Как могут использоваться эти операции, показано в примерах ниже. Заметьте, что если мы имеем дело с несколькими операциями сравнения, то их необходимо заключать в скобки, иначе получим сообщение об ошибке.

IF (a > b) or (a > c) THEN; {Если а больше b или а больше с, то …}

IF (count > 4) and (count <10) THEN …; {Если Count больше 4 и Count меньше 10}

Результат логических операций с логическими переменными

Операнд1

Операнд2

not

and

Or

xor

True

False

False

True

False

False

False

False

False

False

True

False

True

True

True

False

False

True

True

True

True

True

True

False

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

Var bool1, bool2, bool3 : Boolean; Begin Bool1 := False;

Bool2 := not Bool1; {переменная Bool1 получает значение True}

Bool3 := Bool1 OR Bool2; {переменная Bool3 получает значение True}

Bool3 := Bool1 AND Bool2; {переменная Bool3 получает значение False }end;