Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 1-2 Правила записи программ на Object Pa....docx
Скачиваний:
7
Добавлен:
19.04.2019
Размер:
136.78 Кб
Скачать

Арифметические выражения Основные сведения

Каждое выражение имеет тип. Выражение называется арифметическим, если его тип — числовой. Выражение строится посредством операций (унарных или бинарных) и операндов.

В арифметических выражениях если a и b — одного типа, то и a op b принадлежит к тому же типу. Исключением является операция "/":

a / b — вещественное.

Если a и b принадлежат к различным типам, то выражение принадлежит к "старшему" типу. Например:

byte < integer < int64

integer < real

В арифметические выражения могут входить стандартные функции:

exp(x)

ln(x)

abs(x) // модуль x

sin(x)

cos(x)

sqr(x) // квадрат x

sqrt(x) // корень из x

min(x,y)

max(x,y)

pow(x,y)// x в степени y

Порядок выполнения операций в арифметических выражениях

  • Операции с большим приоритетом выполняются первыми

  • Функции вычисляются до операций

  • Выражение в скобках вычисляется раньше

  • Операции с одинаковым приоритетом выполняются слева направо, если идут подряд.

Операции div и mod для целых

x div y = x / y, округленное до ближайшего целого по направлению к нулю. Это результат от целочисленного деления. x mod y = x - (x div y) * y. Это остаток от целочисленного деления.

Пример использования Целочисленные операции часто применяются для определения четности числа:

x mod 2 = 0 <-> x — четное

x mod 2 <> 0 <-> x — нечетное

Логические выражения

Основные сведения

Выражение назывется логическим, если оно имеет тип boolean. Пример.

x < 0

a >= b

a <> 3

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

(бинарные) (унарные)

a and b not a

a or b

a xor b

Таблицы истинности логических операций

a | b | a and b | a or b | a xor b

T | T | T | T | F

T | F | F | T | T

F | T | F | T | T

F | F | F | F | F

Сокращение вычислений логических выражений

Большинство современных компиляторов, в т.ч. PascalABC.NET производит сокращенное вычисление логических выражений. Это означает, что в выражении: a and b

если a — ложно, то b не вычисляется, а в a or b

если a — истинно, b не вычисляется.

Это очень полезно при вычислении таких выражений, как, например,

(y <> 0) and (x / y > 0)

Логически здесь все верно, однако, если бы не использовалось сокращенное вычисление, в случае равенства нулю y'а возникала бы ошибка деления на ноль.

Логические переменные

Можно описывать логические переменные (тип boolean). Им можно присваивать логические выражения. Эти переменные принимают одно из двух возможных значений:

true (истина)

false (ложь)

Пример использования логических переменных Дано: прямоугольник со сторонами, параллельными осям координат, задан координатами абсцисс вертикальных сторон (x1, x2) и ординатами горизонтальных (y1, y2); точка M( x, y ); Найти: находится ли точка внутри прямоугольника, снаружи, или лежит на границе;

var inside, outside, bound: boolean;

begin

inside := (x > x1) and (x < x2) and (y > y1) and (y < y2);

outside := (x < x1) or (x > x2) or (y < y1) or (y > y2);

bound := not inside and not outside;

end.

Побитовые операции

Побитовые операции and, or, xor

Замечание. Работают только с целыми.

Смысл такой — каждое целое переводится в двоичную систему счисления и производится побитовое применение этих операций. Пример.

5 and 10

510 = 1012 710 = 1112

101

( and )

111

———

1012 = 510

Операции shl и shr

Побитовый сдвиг влево и сдвиг вправо соответственно.

shl x shl n = x * 2n

Сдвигает двоичное представление x на n позиций влево.

shr x shr n = x div 2n

Сдвигает двоичное представление x на n позиций вправо.

Примеры

x = 510 = 1012

x shl 2 = <—(2)101

101002 = 2010

x shr 2 = 101—>(2)

0012 = 110

Таблица приоритетов операций языка Object Pascal

  1. унарные + - not

  2. имеющие смысл умножения * / div mod and shl shr

  3. имеющие смысл сложения + - or xor

  4. операции отношения <> <= >= < > in

Оператор case выбора варианта

Синтакстис

case <переключатель> of

{<список выбора>: <оператор>;}

[else <оператор>[;]]

end

Семантика

Вначале вычисляется выражение-<переключатель>, после чего его значение ищется в одном из <списков выбора>. Если значение попадает в какой-то <список выбора>, то выполняется соответствующий ему оператор, иначе, если есть ветвь else, то выполняется оператор по ветке else.

Ограничения

  • выражение-переключатель должно иметь так называемый порядковый тип:

целый

символьный

перечислимый

НО НЕ строковый или вещественный.

  • значения в <списках выбора> не должны пересекаться.

Примеры использования оператора выбора

Пример 1. День недели

case DayOfWeek of

1..5: writeln('Будний');

6, 7: writeln('Выходный');

else writeln('Ошибка');

end;

Пример 2. Цифра или буква

var c: char;

read(c);

case c of

'0'..'9': writeln('Цифра');

'A'..'Z', 'a'..'z', 'а'..'я', 'А'..'Я', 'ё', 'Ё': writeln('Буква');

end;

Циклы

Циклы с предусловием (while) и постусловием (repeat)

Синтаксис цикла while

while <условие> do <— заголовок цикла

<оператор> <— тело цикла

<условие>::= <логическое выражение>

Семантика цикла while

Синтаксис цикла repeat

repeat

<операторы>

until <условие>

Семантика цикла repeat

Зацикливание

Зацикливание происходит, если:

  • условие цикла с предусловием всегда истинно

Пример.

while true do

<оператор>

  • условие цикла с постусловием всегда ложно

Пример.

repeat

<операторы>

until false

Итерация — однократное повторение тела цикла.

Отличия между циклами while и repeat

while

тело может не выполниться ни разу

repeat

тело выполнится хотя бы один раз

Примеры

Пример 1. Сумма нечетных двузначных чисел

С использованием while

s := 0;

x := 11;

while x < 100 do

begin

s += x;

x += 2;

end;

С использованием repeat

s := 0; x := 11;

repeat

s += x;

x += 2;

until x = 99;

Пример 2. Факториал

С использованием repeat

var n: integer;

read(n);

var x := n;

var p := 1;

 

repeat

p *= x;

x -= 1;

until x = 1;

С использованием while

var n: integer;

read(n);

var x := n;

var p := 1;

 

while x > 1 do

begin

p *= x;

x -= 1;

end;

Моделирование repeat с помощью while

repeat Op

Op ——> while not A do

until A; begin

Op

end;

Моделирование while с помощью repeat

while A do if A then

Op ——> repeat

Op

until not A

Оператор цикла с параметром (for)

Синтаксис

<заголовок цикла>

<тело цикла>

<заголовок цикла> ::= for <переменная>:=<выражение1> <направление> <выражение2> do

<тело цикла> ::= <оператор>

<направление> ::= to | downto

Семантика

var b := <выражение1>;

var e := <выражение2>;

<переменная> := b;

 

while <переменная> <> e do

begin

<оператор>

<получить следующее значение переменной>

end;

<получить следующее значение переменной> ::= <переменная> += 1; | <переменная> -= 1;

Ограничения:

  • выражения 1 и 2 должны быть совместимы по присваиванию с переменной

  • переменная должна иметь порядковый тип (такой же, как и в case — целый, символьный или перечислимый)

  • переменная цикла for не должна меняться внутри цикла for

  • переменная цикла for должна быть описана в той же п/п, где используется цикл

Дополнительные возможности PascalABC.NET

Возможно описание переменной цикла в его заголовке:

for [var] i: integer := 1 to 5 do

<оператор>

Возможно автоопределение типа при описании:

for var i := 1 to 5 do

<оператор>

Переменная цикла, описанная в заголовке цикла, определена только внутри цикла. Замечание. Значение переменной цикла после завершения цикла не определено. Именно поэтому рекомендуется описывать переменную цикла в заголовке цикла.