Основы программирования — Осенний семестр; Михалкович С.С.; 2008; II — различия между версиями

Материал из Вики ИТ мехмата ЮФУ
Перейти к: навигация, поиск
Строка 1: Строка 1:
 
[[Категория:Конспекты]]
 
[[Категория:Конспекты]]
 
[[Категория:Основы программирования]]
 
[[Категория:Основы программирования]]
== Оператор присваивания := ==
+
== Основные операторы ==
=== Синтаксис ===
+
=== Оператор присваивания := ===
 +
<xh4> Синтаксис </xh4>
 
  <переменная> ''':=''' <выражение>
 
  <переменная> ''':=''' <выражение>
  
Строка 11: Строка 12:
 
</source>
 
</source>
  
=== Семанитика ===
+
<xh4> Семанитика </xh4>
 
Вычисляется выражение в правой части, при этом, вместо имен переменных подставляются их значения. <br />
 
Вычисляется выражение в правой части, при этом, вместо имен переменных подставляются их значения. <br />
 
Затем результат вычисления записывается в переменную в левой части.
 
Затем результат вычисления записывается в переменную в левой части.
Строка 20: Строка 21:
 
* выражение типа <tt>integer</tt> можно присвоить переменной типа <tt>real</tt>. Обратное неверно.
 
* выражение типа <tt>integer</tt> можно присвоить переменной типа <tt>real</tt>. Обратное неверно.
  
=== Операторы присваивания += и *= ===
+
<xh4> Операторы присваивания += и *= </xh4>
 
''<u>Пример</u>.''
 
''<u>Пример</u>.''
 
<source lang="Pascal">
 
<source lang="Pascal">
Строка 27: Строка 28:
 
</source>
 
</source>
  
=== Примеры использования := ===
+
<xh4> Примеры использования := </xh4>
 
''<u>Пример 1</u>.'' Перемена местами двух значений.
 
''<u>Пример 1</u>.'' Перемена местами двух значений.
 
Дано:  <tt>x, y</tt>;
 
Дано:  <tt>x, y</tt>;
Строка 87: Строка 88:
 
Об этом читай [http://it.mmcs.sfedu.ru/forum?func=view&id=22350&catid=1 тему].
 
Об этом читай [http://it.mmcs.sfedu.ru/forum?func=view&id=22350&catid=1 тему].
  
== Оператор ввода ==
+
=== Оператор ввода ===
=== Синтаксис ===
+
<xh4> Синтаксис </xh4>
 
  '''read''' (<список переменных>) | '''readln''' (<список переменных>)
 
  '''read''' (<список переменных>) | '''readln''' (<список переменных>)
  
=== Семантика ===
+
<xh4> Семантика </xh4>
 
Происходит считывание данных с клавиатуры и запись их в переменные из <tt><списка переменных></tt>.  
 
Происходит считывание данных с клавиатуры и запись их в переменные из <tt><списка переменных></tt>.  
 
Вводить данные нужно либо через пробел, либо по нажатию <tt><Enter></tt>, при этом программа не перейдет к выполнению следующего оператора, пока не будут считаны все данные.
 
Вводить данные нужно либо через пробел, либо по нажатию <tt><Enter></tt>, при этом программа не перейдет к выполнению следующего оператора, пока не будут считаны все данные.
Строка 97: Строка 98:
 
С процедурой ввода связан ряд '''''ошибок''''' (например, если переменная используется в качестве делителя, и вводится 0, или, если должно быть получено целое число, а вводится <tt>'ABC'</tt>). Эти ошибки нужно уметь обрабатывать.
 
С процедурой ввода связан ряд '''''ошибок''''' (например, если переменная используется в качестве делителя, и вводится 0, или, если должно быть получено целое число, а вводится <tt>'ABC'</tt>). Эти ошибки нужно уметь обрабатывать.
  
== Оператор try/except и обработка ошибок ввода ==
+
=== Оператор try/except и обработка ошибок ввода ===
 
Операторы, которые могут получать ошибку, заключаются специальный охранный блок - оператор <tt>'''try'''</tt>.
 
Операторы, которые могут получать ошибку, заключаются специальный охранный блок - оператор <tt>'''try'''</tt>.
  
=== Синтаксис ===
+
<xh4> Синтаксис </xh4>
 
<source lang="Pascal">
 
<source lang="Pascal">
 
try
 
try
Строка 112: Строка 113:
 
</source>
 
</source>
  
=== Семантика ===
+
<xh4> Семантика </xh4>
 
Если внутри блока '''<tt>try</tt>''' происходит ''ошибка выполнения'', то все последующие операторы в блоке игнорируются, и выполнение программы переходит к блоку '''<tt>except</tt>'''. По выходе из '''<tt>except</tt>''' программа продолжает работу.
 
Если внутри блока '''<tt>try</tt>''' происходит ''ошибка выполнения'', то все последующие операторы в блоке игнорируются, и выполнение программы переходит к блоку '''<tt>except</tt>'''. По выходе из '''<tt>except</tt>''' программа продолжает работу.
  
 
Если ошибки не происходит, то выполняются все операторы в блоке '''<tt>try</tt>''', блок '''<tt>except</tt>''' не выполняется, и программа продолжает работу.
 
Если ошибки не происходит, то выполняются все операторы в блоке '''<tt>try</tt>''', блок '''<tt>except</tt>''' не выполняется, и программа продолжает работу.
  
== Оператор вывода ==
+
=== Оператор вывода ===
=== Синтаксис ===
+
<xh4> Синтаксис </xh4>
 
  '''write'''(<список выражений>) | '''writeln'''(<список выражений>)
 
  '''write'''(<список выражений>) | '''writeln'''(<список выражений>)
  
=== Семантика ===
+
<xh4> Семантика </xh4>
 
Выражения в списке вычисляются, и их значения выводятся на экран. <br />
 
Выражения в списке вычисляются, и их значения выводятся на экран. <br />
 
В случае <tt>writeln</tt> после вывода осуществляется переход на новую строку.
 
В случае <tt>writeln</tt> после вывода осуществляется переход на новую строку.
  
=== Форматы вывода ===
+
<xh4> Форматы вывода </xh4>
 
После каждого выражения в списке вывода можно использовать '''формат вывода''' в виде <tt>''':a'''</tt>, где <tt>'''a'''</tt> — выражение целого типа.<br />
 
После каждого выражения в списке вывода можно использовать '''формат вывода''' в виде <tt>''':a'''</tt>, где <tt>'''a'''</tt> — выражение целого типа.<br />
 
После вещественного типа — <tt>''':a:b'''</tt> (<tt>'''a'''</tt> задает ширину поля вывода (выравнивание по правому краю), <tt>'''b'''</tt> — количество знаков в дробной части).
 
После вещественного типа — <tt>''':a:b'''</tt> (<tt>'''a'''</tt> задает ширину поля вывода (выравнивание по правому краю), <tt>'''b'''</tt> — количество знаков в дробной части).
  
=== Вывод с помощью write[ln]Format ===
+
<xh4> Вывод с помощью write[ln]Format </xh4>
 
  '''writelnFormat'''('<форматная строка>', <список выражений>)
 
  '''writelnFormat'''('<форматная строка>', <список выражений>)
  
Строка 144: Строка 145:
 
<br><tt>{0, 10:f3}</tt>: 3 — это количество знаков в дробной части для вещественного числа (показывает это спецификатор <tt>'''f'''</tt>).
 
<br><tt>{0, 10:f3}</tt>: 3 — это количество знаков в дробной части для вещественного числа (показывает это спецификатор <tt>'''f'''</tt>).
  
== Условный оператор ==
+
=== Условный оператор ===
=== Синтаксис ===
+
<xh4> Синтаксис </xh4>
 
  '''if''' <условие> '''then''' <оператор<sub>1</sub>>
 
  '''if''' <условие> '''then''' <оператор<sub>1</sub>>
 
               '''else''' <оператор<sub>2</sub>>
 
               '''else''' <оператор<sub>2</sub>>
  
=== Семантика ===
+
<xh4> Семантика </xh4>
 
[[Изображение: If.jpg]]
 
[[Изображение: If.jpg]]
  
=== Примеры использования для решения задач ===
+
<xh4> Примеры использования для решения задач </xh4>
 
''<u>Пример 1</u>.'' Нахождение минимума
 
''<u>Пример 1</u>.'' Нахождение минимума
 
<br>Дано: <tt>x, y</tt>;  
 
<br>Дано: <tt>x, y</tt>;  
Строка 222: Строка 223:
 
* Является ли 4-угольник ABCD корректно заданным.
 
* Является ли 4-угольник ABCD корректно заданным.
  
== Арифметические выражения ==
+
=== Арифметические выражения ===
=== Основные сведения ===
+
<xh4> Основные сведения </xh4>
 
Каждое выражение имеет '''тип'''. Выражение называется '''''арифметическим''''', если его тип — ''числовой''. <br />
 
Каждое выражение имеет '''тип'''. Выражение называется '''''арифметическим''''', если его тип — ''числовой''. <br />
 
Выражение строится посредством '''''операций''''' (унарных или бинарных) и '''''операндов'''''.
 
Выражение строится посредством '''''операций''''' (унарных или бинарных) и '''''операндов'''''.
Строка 247: Строка 248:
 
  '''pow'''(x,y)// x в степени y
 
  '''pow'''(x,y)// x в степени y
  
=== Порядок выполнения операций в арифметических выражениях ===
+
<xh4> Порядок выполнения операций в арифметических выражениях </xh4>
 
* Операции с большим приоритетом выполняются первыми
 
* Операции с большим приоритетом выполняются первыми
 
* Функции вычисляются до операций
 
* Функции вычисляются до операций
Строка 253: Строка 254:
 
* Операции с одинаковым приоритетом выполняются слева направо, если идут подряд.
 
* Операции с одинаковым приоритетом выполняются слева направо, если идут подряд.
  
=== Операции div и mod для целых ===
+
<xh4> Операции div и mod для целых </xh4>
 
<tt>x '''div''' y = x / y, округленное до ближайшего целого по направлению к нулю.</tt> Это '''''результат''''' от ''целочисленного деления''. <br />
 
<tt>x '''div''' y = x / y, округленное до ближайшего целого по направлению к нулю.</tt> Это '''''результат''''' от ''целочисленного деления''. <br />
 
<tt>x '''mod''' y = x - (x div y) * y.</tt> Это '''''остаток''''' от ''целочисленного деления''.
 
<tt>x '''mod''' y = x - (x div y) * y.</tt> Это '''''остаток''''' от ''целочисленного деления''.
Строка 262: Строка 263:
 
  x '''mod''' 2 <> 0  <->  x — нечетное
 
  x '''mod''' 2 <> 0  <->  x — нечетное
  
== Логические выражения ==
+
=== Логические выражения ===
=== Основные сведения ===
+
<xh4> Основные сведения </xh4>
 
Выражение назывется '''логическим''', если оно имеет тип <tt>'''boolean'''.</tt> <br />
 
Выражение назывется '''логическим''', если оно имеет тип <tt>'''boolean'''.</tt> <br />
 
''<u>Пример</u>''.
 
''<u>Пример</u>''.
Строка 276: Строка 277:
 
   a '''xor''' b
 
   a '''xor''' b
  
=== Таблицы истинности логических операций ===
+
<xh4> Таблицы истинности логических операций </xh4>
 
  a | b | a '''and''' b | a '''or''' b | a '''xor''' b  
 
  a | b | a '''and''' b | a '''or''' b | a '''xor''' b  
 
   
 
   
Строка 284: Строка 285:
 
  F | F |    F    |  F    |    T
 
  F | F |    F    |  F    |    T
  
=== Сокращение вычислений логических выражений ===
+
<xh4> Сокращение вычислений логических выражений </xh4>
 
Большинство современных компиляторов, в т.ч. PascalABC.NET производит '''''сокращенное вычисление логических выражений'''''. <br />
 
Большинство современных компиляторов, в т.ч. PascalABC.NET производит '''''сокращенное вычисление логических выражений'''''. <br />
 
Это означает, что в выражении
 
Это означает, что в выражении
Строка 296: Строка 297:
  
 
Логически здесь все верно, однако, если бы не использовалось сокращенное вычисление, в случае равенства нулю <tt>y</tt>'а возникала бы ошибка деления на ноль.
 
Логически здесь все верно, однако, если бы не использовалось сокращенное вычисление, в случае равенства нулю <tt>y</tt>'а возникала бы ошибка деления на ноль.
=== Логические переменные ===
+
 
 +
<xh4> Логические переменные </xh4>
 
Можно описывать логические переменные (тип <tt>'''boolean'''</tt>). Им можно присваивать логические выражения. <br />
 
Можно описывать логические переменные (тип <tt>'''boolean'''</tt>). Им можно присваивать логические выражения. <br />
 
Эти переменные принимают одно из двух возможных значений:
 
Эти переменные принимают одно из двух возможных значений:
Строка 315: Строка 317:
 
</source>
 
</source>
  
== Побитовые операции ==
+
=== Побитовые операции ===
=== Побитовые операции and, or, xor ===
+
<xh4> Побитовые операции and, or, xor </xh4>
 
'''Замечание.''' Работают только с целыми.
 
'''Замечание.''' Работают только с целыми.
  
Строка 331: Строка 333:
 
  101<sub>2</sub> = 5<sub>10</sub>
 
  101<sub>2</sub> = 5<sub>10</sub>
  
=== Операции shl и shr ===
+
<xh4> Операции shl и shr </xh4>
 
'''''Побитовый сдвиг влево''''' и '''''сдвиг вправо''''' соответственно.
 
'''''Побитовый сдвиг влево''''' и '''''сдвиг вправо''''' соответственно.
  
Строка 353: Строка 355:
 
           001<sub>2</sub> = 1<sub>10</sub>
 
           001<sub>2</sub> = 1<sub>10</sub>
  
== Таблица приоритетов операций языка Object Pascal ==
+
=== Таблица приоритетов операций языка Object Pascal ===
 
# унарные <tt>'''+ - not'''</tt>
 
# унарные <tt>'''+ - not'''</tt>
 
# имеющие смысл ''умножения'' <tt>'''* / div mod and shl shr'''</tt>
 
# имеющие смысл ''умножения'' <tt>'''* / div mod and shl shr'''</tt>
Строка 359: Строка 361:
 
# операции ''отношения'' <tt>'''<> <= >= < > in'''</tt>
 
# операции ''отношения'' <tt>'''<> <= >= < > in'''</tt>
  
== Оператор case выбора варианта ==
+
=== Оператор case выбора варианта ===
=== Синтакстис ===
+
<xh4> Синтакстис </xh4>
 
  '''case''' <переключатель> '''of'''
 
  '''case''' <переключатель> '''of'''
 
   {<список выбора>: <оператор>;}
 
   {<список выбора>: <оператор>;}
Строка 366: Строка 368:
 
  '''end'''
 
  '''end'''
  
=== Семантика ===
+
<xh4> Семантика </xh4>
 
Вначале вычисляется выражение-<tt><переключатель></tt>, после чего его значение ищется в одном из <tt><списков выбора></tt>. <br />
 
Вначале вычисляется выражение-<tt><переключатель></tt>, после чего его значение ищется в одном из <tt><списков выбора></tt>. <br />
 
Если значение попадает в какой-то <tt><список выбора></tt>, то выполняется соответствующий ему оператор, иначе, если есть ветвь '''<tt>else</tt>''', то выполняется оператор по ветке <tt>else</tt>.
 
Если значение попадает в какой-то <tt><список выбора></tt>, то выполняется соответствующий ему оператор, иначе, если есть ветвь '''<tt>else</tt>''', то выполняется оператор по ветке <tt>else</tt>.
  
=== Ограничения ===
+
<xh4> Ограничения </xh4>
 
* выражение-переключатель должно иметь так называемый '''''порядковый''''' тип:
 
* выражение-переключатель должно иметь так называемый '''''порядковый''''' тип:
 
:''целый''
 
:''целый''
Строка 378: Строка 380:
 
* значения в <tt><списках выбора></tt> не должны пересекаться.
 
* значения в <tt><списках выбора></tt> не должны пересекаться.
  
=== Примеры использования оператора выбора ===
+
<xh4> Примеры использования оператора выбора </xh4>
 
''<u>Пример 1</u>.'' День недели
 
''<u>Пример 1</u>.'' День недели
 
<source lang="Pascal">
 
<source lang="Pascal">

Версия 12:51, 4 июня 2009

Основные операторы

Оператор присваивания :=

<xh4> Синтаксис </xh4>

<переменная> := <выражение>

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

a := (3 + 5) * 8; 
b := a + 2;

<xh4> Семанитика </xh4> Вычисляется выражение в правой части, при этом, вместо имен переменных подставляются их значения.
Затем результат вычисления записывается в переменную в левой части.

Ограничение. Тип выражения должен быть совместим по присваиванию с переменной.
Например:

  • одинаковые типы совместимы.
  • выражение типа integer можно присвоить переменной типа real. Обратное неверно.

<xh4> Операторы присваивания += и *= </xh4> Пример.

d += 1; //прибавить 1 к d
d *= 2; //умножить d на 2

<xh4> Примеры использования := </xh4> Пример 1. Перемена местами двух значений. Дано: x, y;

var x, y: integer;
begin
  read(x,y);
  var v := x;
  x := y;
  y := v;
  writeln(x, ' ', y);
end.

Это стандартное решение. В PascalABC.NET на основе этого алгоритма определена стандартная процедура Swap(x, y).

Однако, существуют и другие решения. Например:

var x, y: integer;
begin
  read(x, y);
  x := x + y;
  y := x - y;
  x := x - y;
  writeln (x, ' ', y);
end.

Пример 2. Использование промежуточных переменных в вычислениях Дано: x: real; Найти: x15;

Решение 1.

y := x * x;
z := y * y;
t := z * z;
p := t * z;
q := p * x * y;

Решение 2.

y := x * x;
z := y * x;
t := z * y;
p := t * t * t;

Решение 3.

y := x * x;
x := x * y * y;
t := x * x * x;

Заметим, что в первом решении используется 6 операций умножения, в во 2м и 3м — 5. Возникает задача: найти xn за минимальное число умножений.
Об этом читай тему.

Оператор ввода

<xh4> Синтаксис </xh4>

read (<список переменных>) | readln (<список переменных>)

<xh4> Семантика </xh4> Происходит считывание данных с клавиатуры и запись их в переменные из <списка переменных>. Вводить данные нужно либо через пробел, либо по нажатию <Enter>, при этом программа не перейдет к выполнению следующего оператора, пока не будут считаны все данные.

С процедурой ввода связан ряд ошибок (например, если переменная используется в качестве делителя, и вводится 0, или, если должно быть получено целое число, а вводится 'ABC'). Эти ошибки нужно уметь обрабатывать.

Оператор try/except и обработка ошибок ввода

Операторы, которые могут получать ошибку, заключаются специальный охранный блок - оператор try.

<xh4> Синтаксис </xh4>

try
  ...
  readln(a);
  ...
except
  <обработка ошибки>
end;
<продолжение работы>

<xh4> Семантика </xh4> Если внутри блока try происходит ошибка выполнения, то все последующие операторы в блоке игнорируются, и выполнение программы переходит к блоку except. По выходе из except программа продолжает работу.

Если ошибки не происходит, то выполняются все операторы в блоке try, блок except не выполняется, и программа продолжает работу.

Оператор вывода

<xh4> Синтаксис </xh4>

write(<список выражений>) | writeln(<список выражений>)

<xh4> Семантика </xh4> Выражения в списке вычисляются, и их значения выводятся на экран.
В случае writeln после вывода осуществляется переход на новую строку.

<xh4> Форматы вывода </xh4> После каждого выражения в списке вывода можно использовать формат вывода в виде :a, где a — выражение целого типа.
После вещественного типа — :a:b (a задает ширину поля вывода (выравнивание по правому краю), b — количество знаков в дробной части).

<xh4> Вывод с помощью write[ln]Format </xh4>

writelnFormat('<форматная строка>', <список выражений>)

Пример вывода с использованием форматной строки.

writelnFormat('{0} * {1} = {2}', a, b, a * b)

Будет выведено:

a * b = a * b

В форматной строке тоже можно использовать формат вывода.
{0, 10}: 10 — это ширина поля вывода
{0, 10:f3}: 3 — это количество знаков в дробной части для вещественного числа (показывает это спецификатор f).

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

<xh4> Синтаксис </xh4>

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

<xh4> Семантика </xh4> If.jpg

<xh4> Примеры использования для решения задач </xh4> Пример 1. Нахождение минимума
Дано: x, y;
Найти: min;

if x > y then
  min := y
else
  min := x;

Пример 2. Упорядочение a, b по возрастанию.
Ясно, что если a > b, — нужно поменять их местами.
Но тут одним оператором не обойтись. Для этого можно использовать составной оператор — один или больше операторов, заключенных в операторные скобки begin - end;:

if a > b then
begin
  var v := b;
  b := a;
  a := v;
end;

Пример 3. Вычисление функции по взаимоисключающим веткам
<math>y = \begin{cases} x, & x < 2 \\ x^2, & 2 < x < 3 \\ 1-x, & x \ge\; 3 \end{cases}</math>

if x < 2 then
  y := x
else
  if x < 3 then
    y := x * x
  else
    y := 1 - x;

Замечание. Если по ветви else располагается другой оператор if, то говорят, что возникает цепочка вложенных операторов if.

Пример 4. Найти среднее среди a, b, c (a, b, c попарно не равны)
Эта задача имеет несколько вариантов решения.

if a < b then
  if a < c then
    if b < c then
      sr := b
    else
      sr := c
  else
    sr := a
else
  if a > c then
    if b > c then
      sr := b
    else
      sr := c
  else sr := a;

Очевидно, это не самое лучшее решение.
Можно воспользоваться стандартными функциями сравнения.

sr := min(a,b);
if sr < c then
  sr := min(max(a,b), c);

Самостоятельно.

  • Даны координаты вершин треугольника и точка M. Принадлежит ли M треугольнику.
  • Является ли 4-угольник ABCD корректно заданным.

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

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

В арифметических выражениях если 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

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

  • Операции с большим приоритетом выполняются первыми
  • Функции вычисляются до операций
  • Выражение в скобках вычисляется раньше
  • Операции с одинаковым приоритетом выполняются слева направо, если идут подряд.

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

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

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

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

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

x < 0
a >= b
a <> 3

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

 (бинарные)     (унарные)
  a and b         not a
  a or b
  a xor b

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

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    |    F
F | F |    F    |   F    |    T

<xh4> Сокращение вычислений логических выражений </xh4> Большинство современных компиляторов, в т.ч. PascalABC.NET производит сокращенное вычисление логических выражений.
Это означает, что в выражении

a and b

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

a or b

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

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

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

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

<xh4> Логические переменные </xh4> Можно описывать логические переменные (тип 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.

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

<xh4> Побитовые операции and, or, xor </xh4> Замечание. Работают только с целыми.

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

5 and 10

510 = 1012
710 = 1112

101
   ( and )
111
———
1012 = 510

<xh4> Операции shl и shr </xh4> Побитовый сдвиг влево и сдвиг вправо соответственно.

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 выбора варианта

<xh4> Синтакстис </xh4>

case <переключатель> of
  {<список выбора>: <оператор>;}
  [else <оператор>[;]]
end

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

<xh4> Ограничения </xh4>

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

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

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

<xh4> Примеры использования оператора выбора </xh4> Пример 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;