Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
[ Монахов ] Объектно-ориентированное программирование.doc
Скачиваний:
94
Добавлен:
16.08.2013
Размер:
490.5 Кб
Скачать

2.6. Логические операторы и операции отношения.

Логические операторы:

and логическое "И". Пример: a and b

or логическое "ИЛИ": a or b

xor логическое "исключающее ИЛИ": a xor b

not логическое "НЕ": not a

Операции отношения (результат — типа boolean):

= равно. Пример: A=B

<> не равно: A<>B

> больше: A>B

< меньше: A<B

>= больше или не равно: A>=B

<= меньше или не равно: A<=B

in принадлежность множеству: A in B

2.7. Потеря точности, потеря порядка и переполнение при арифметических операциях.

Пусть x1 – арифметическая переменная real, x2 – вещественная extended. Тогда выполнение присваиваний x2:=1+1e-14 даст 1.00000000000001, а x1:=1+1e-14 даст 10000000000000,т.к. числа real имеют всего 12 значащих цифр мантиссы. После этого выражение x2:=x2-1 даст 1e-14, а выражение x1:=x1-1 даст 0. Это потеря точности. Если мы имеем выражение типа a+b-c, где a очень близко к c, а b<<a (и, значит, b<<c), то большее значение приобретает порядок действий. При этом выражение (a-c)+b дает гораздо лучшую точность, чем (a+b)-c. По умолчанию действия выполняются слева направо, поэтому a+b-c это то же, что (a-c)+b. Потеря порядка – выход при умножении или делении за пределы минимального порядка. Так, x1:=1e/-26 даст не 0, а ошибку потери порядка. Арифметическое переполнение – выход за пределы максимальных значений для данного типа. Так, x1:=1e20*1e20 даст переполнение вещественного типа. А если I типа integer, I:=20000; j:=15000, то выражения I:=I+j, I:=2*I, либо I:=2*j-10000 дадут переполнение. При этом возникновение диагностики переполнения во время выполнения программы зависит от опции компилятора.

2.8. Структура простейшей программы.

В PASCAL любое число пробелов, символов <TAB> или переносов на новую строку везде приводится к одному пробелу (конечно, кроме строковых выражений). Имя файла с текстом программы должно быть то же, что имя программы, а расширение имени файла после точки должно быть PAS. Многострочные комментарии заключаются в фигурные скобки, однострочные – начинаются со знака “//”.

program MyProg1; //имя файла должно быть MyProg1.pas

var a,b,c: integer; {начало раздела переменных – зарезервированное

слово var}

a1,b1: real;

x: integer;

goodResult: boolean; //конец раздела описания переменных

begin //начало тела программы

a:=1;

b:=a+5;

a1:=b/sin(b-a);

x:=round(a1);

goodResult:=(x<2);

end. //конец тела программы, завершается точкой

Комментарии компилятором игнорируется.

2.9. Простейшие операторы языка Object pascal

2.9.1. Пустой и составной операторы.

Операторы в языке PASCAL разделяется символом ";".

Пустой оператор — это просто пустая строка (или эквивалентная ей последовательность пробелов и переносов на новую строку), после которой стоит ";". Он ничего не делает. Иногда использовался для того, чтобы поставить перед ним метку для использования в операторе goto.

Составной оператор — блок кода от begin до end:

begin

последовательность простых или составных операторов

end;

Используется там, где по синтаксису языка PASCAL может стоять один оператор, а надо использовать последовательность операторов.

Замечание: Перед операторной скобкой end точка с запятой необязательна. Однако ее лучше ставить, так как при котировании строк в другое место программы отсутствие “;” вызовет ошибку компиляции, точно также, как и добавление новых строк в блок.

2.9.2. Оператор безусловного перехода goto.

Этот оператор требует наличия метки (label), на которую и производится переход. Идентификатор метки — либо целое число, меньшее <65367, либо буквенно-численный идентификатор; обычно используют число.

program MyProg2;

label 1;

var i: integer;

begin

...

if...then goto1;

...

1:...

...

end.

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

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

if условие then оператор; — первая форма

В C-образных if (условие) оператор;

if условие then оператор1

else оператор2; — вторая форма

В C-образных if (условие) оператор;

Else оператор;

Пример:

if a<b

then a:=a+1

else (if a=b

then a:=a+1

else

begin

a:=a+1;

b:=b+1

end

);

Надо отметить, что после then должен стоять только один оператор, а не последовательность операторов. Поэтому запись оператора в виде

if условие then оператор1;

else оператор2;

недопустима, т.к. символ ”;”, стоящий после оператора1, рассматривается как пустой оператор, и поэтому между then и else стоят два оператора, а может быть только один. Хотя бы и составной, ограниченный операторными скобками begin и end.

В случае последовательности операторов типа:

if условие1 then if условие2 then оператор1 else оператор2;

имеющийся else относится к последнему then, поэтому лучше отформатировать текст так:

if условие1

then if условие2

then оператор1

else оператор2;

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

Пример неправильного стиля оформления:

if условие1

then if условие2

then оператор1

else оператор2;

Этот стиль подталкивает к логической ошибке при чтении программы. Надо отметить, что сама возможность такой ошибки связана с непродуманностью синтаксиса языка PASCAL (в том числе Object Pascal). Другой вариант ошибки, связанный с синтаксисом PASCAL, может быть вызван лишним символом “;” после then. Так, строки

If условие then; оператор1;

И

If условие then оператор1;

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

If условие then;

Оператор1;

Т.е. при выполнении условия выполнится пустой оператор, а оператор1 будет выполнен всегда.

2.9.4. Оператор выбора case.

Является аналогом if для нескольких условий выбора. Варианты синтаксиса оператора для различной формы записи условий следующие:

сase выражение of

значение1:оператор1;

...

значение2,значение3,...,значениеN:оператор2;

начальное значение..конечное значение:оператор3

else оператор

end;

Тип выражения должен быть либо каким-нибудь из перечисляемых типов: целый, либо литерным, либо булевским, либо элементом множества, в частности, строковый и вещественный типы недопустимы . Значения — совместимого типа.

Часть с else является необязательной.

Пример:

case (a mod b) of

0: i:=0;

1: i:=1;

2,4,6,8: i:=2;

10..100: begin

i:=3;

a:=a div10

end

else i:=4

end {/case};

. . .

В C-образных языках для аналогичных целей применяется конструкция

switch (выражение)

{

case значение1: оператор1;

……………………………

case значение N: оператор N;

default: оператор;

}

2.9.5. Оператор цикла for.

Имеется две формы синтаксиса оператора.

Соседние файлы в предмете Информатика