Операторы языка Project Pascal

Введение 
 
1. Операции и выражения 
 
2. Операторы языка Object Pascal 
 
3. Организация ввода-вывода 
 
Выводы 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ЛИТЕРАТУРА

  1.  
    Марченко А.И., Марченко Л.А. Программирование в среде Turbo Pascal 7.0. – 8-е изд. – К.: ВЕК+, СПб.: КОРОНА принт, 2004.
  2.  
    Ставровский А.Б. Первые шаги в программировании. Самоучитель. – М.: «Вильямс», 2003.
  3.  
    Галисеев Г.В. Программирование в среде Delphi 7. Самоучитель. – М.: «Вильямс», 2004.

 

 

 

 

ВВЕДЕНИЕ

 
Главную часть программы на языке Object Pascal составляет раздел операторов, в котором реализуется алгоритм решения поставленной задачи, т.е. именно в нем с предварительно описанными переменными, константами, значениями функций и т.п. выполняются определенные действия, позволяющие получить результат, ради которого создается программа. 
 
Раздел операторов начинается ключевым словом ^ Begin (начало), затем следуют операторы языка, отделяемые друг от друга точкой с запятой. Завершают раздел ключевое слово End и точка. 
 
Операторы выполняются строго последовательно в том порядке, в котором они записаны в тексте программы в соответствии с синтаксисом и семантикой языка программирования. Некоторые операторы (перехода, условные) позволяют нарушить естественный последовательный порядок выполнения операторов. 
 
Целью лекции является изучение принципов использования выражений и операторов в программах на языке Object Pascal.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1. ОПЕРАЦИИ И ВЫРАЖЕНИЯ

1.1. Приоритет операций и их  классификация

 
Выражение в программировании служит для определения порядка выполнения действий над элементами данных и состоит из операндов (констант, переменных, обращений к функциям), круглых скобок и знаков операций. 
 
По количеству операндов операции делятся на унарные и бинарные. Унарные операции имеют только один операнд, перед которым располагается символ операции. К унарным относятся: операции изменения знака «-» (минус) и сохранения знака «+» (плюс), а также логическое отрицание «not» (НЕ) и взятия адреса @, например,

 
Выражение

 
Результат

 
-7

 
-7

 
-(-9)

 
9

 
+5

 
5

 
not False

 
True


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

 
Выражение

 
Результат

 
5+7

 
12

 
(4-2)*5+10

 
20

 
True or False

 
True


 
По характеру выполняемых действий операции разделяются на следующие группы: 
 
1. Арифметические операции:

  •  
    унарные: +, -
  •  
    бинарные: +, -, *, /, div, mod

 
2. Операции отношения: 
 
=, <>, <, >, <=, >= 
 
3. Булевы (логические) операции: 
 
not, and, or, xor 
 
4. Поразрядные логические и сдвиговые операции: 
 
not, and, or, xor, shl, shr 
 
5. Строковая операция (конкатенация): 
 

 
6. Операции над множествами: 
 
+, -, *, in, <=, >= 
 
7. Операция взятия адреса: 
 

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

  •  
    приоритетом операций;
  •  
    порядком расположения операций в выражении;
  •  
    использованием скобок.

 
По приоритету все операции делятся на четыре группы (табл.1.1). 
 

 

 

Таблица 1.1. Приоритет операций

 
Приоритет

 
Операции

 
^ Категория операций

 
Первый (высший)

 
+ - not @

 
Унарные операции

 
Второй

 
* / div mod and shl shr

 
Бинарные операции типа умножения

 
Третий

 
+ - or xor

 
Бинарные операции типа сложения

 
Четвертый (низший)

 
= <> < > <= >= in

 
Бинарные операции отношения


 
Операции первого (высшего) приоритета выполняются в первую очередь. Операции четвертого (низшего) приоритета выполняются  в последнюю очередь. Операции с  равным приоритетом выполняются  слева направо, хотя иногда компилятор для генерации оптимального кода может переупорядочить операнды. Скобки служат для изменения обычного порядка обработки операций. Подвыражение, заключенное в скобки, сначала  вычисляется как отдельный операнд, а затем его результат используется для выполнения операций, обрамляющих  скобки. 
 
Р  
ис. 1.1 иллюстрирует порядок выполнения операций в сложных выражениях. 
^

1.2. Типы выражений

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

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

 
Арифметическое выражение порождает целое или действительное значение. Наиболее простыми формами арифметических выражений являются: целая или действительная константа без знака; целая или действительная переменная; элемент массива целого или действительного типа; функция, принимающая целое или действительное значение. 
 
Значение переменной или элемента массива должно быть определено до их появления в арифметическом выражении. Другие арифметические выражения составляются из вышеперечисленных простых форм путем применения круглых скобок и арифметических операций. 
 
Арифметические операции выполняют арифметические действия в выражениях над значениями операндов целого и вещественного типа (группы integer и real) и представлены в табл. 1.2.

Табл. 1.2. Арифметические операции

 
Знак операции

 
Операция и действие

 
Типы операндов

 
^ Тип результата

 
Унарные

 
+

 

 
Сохранение знака

 
integer 
 
real

 
integer 
 
real

 
-

 

 
Изменение знака

 
integer 
 
real

 
integer 
 
real

 
Бинарные

 
+

 
A+B

 
Сложение

 
integer 
 
real 
 
real, integer

 
integer 
 
real 
 
real

 
-

 
A-B

 
Вычитание

 
integer 
 
real 
 
real, integer

 
integer 
 
real 
 
real

 
*

 
A*B

 
Умножение

 
integer 
 
real 
 
real, integer

 
integer 
 
real 
 
real

 
/

 
A/B

 
Деление

 
integer 
 
real 
 
real, integer

 
real 
 
real 
 
real

 
div

 
A div B

 
Целочисленное деление

 
integer

 
integer

 
mod

 
A mod B

 
Остаток от деления

 
integer

 
integer

 
Поразрядные (битовые) булевские и сдвиговые операции

 
not

 
not A

 
Арифметическое НЕ

 
integer

 
integer

 
and

 
A and B

 
Арифметическое И

 
integer

 
integer

 
or

 
A or B

 
Арифметическое ИЛИ

 
integer

 
integer

 
xor

 
A xor B

 
Арифметическое исключающее ИЛИ

 
integer

 
integer

 
shl

 
A shl B

 
Целочисленный сдвиг влево

 
integer

 
integer

 
shr

 
A shr B

 
Целочисленный сдвиг вправо

 
integer

 
integer


 
Следует только помнить, что если операнды принадлежат к различным типам, то тип результата будет более  охватывающим. 
 
^ Операции сложения (+) и вычитания (-) выполняются так же, как и в обычных арифметических выражениях. Допускается смешение типов integer и real в одном выражении, например: 
 
Выражение Результат 
 
34+17.09 51.09 
 
5-43 -38 
 
67+(-12+6.05) 61.05 
 
Операции умножения (*) и деления (/) имеют наивысший приоритет и выполняются с данными типа integer и real, причем тип результата операции деления (/) всегда будет вещественным. 
 
Выражение Результат 
 
134*12 1608 
 
1.22*3.05 3.72 
 
997/4 249.25 
 
Целочисленное деление (div) отличается от обычной операции деления тем, что возвращает целую часть частного, дробная часть отбрасывается. Перед выполнением операции оба операнда округляются до целых значений. Результат целочисленного деления всегда равен нулю, если делимое по модулю меньше делителя. 
 
Выражение Результат 
 
11 div 5 2 
 
2 div 3 0 
 
-13 div 4 -3 
 
25 div –6 -4 
 
-13 div –4 3 
 
^ Деление по модулю (mod) восстанавливает остаток, полученный при выполнении целочисленного деления. 
 
Выражение Результат 
 
14 mod 5 4 
 
-13 mod 4 -1 
 
13 mod –4 1 
 
-13 mod –4 -1 
 
В арифметические выражения могут включаться стандартные функции, определенные в языке. Перечень некоторых таких функций приведен в табл. 1.3. 
 
Таблица 1.3. Арифметические функции и процедуры

 
Функция, процедура

 
Обозначение

 
^ Тип аргумента

 
Тип результата

 
Примеры

 
Выражение

 
Результат

 
Абсолютное значение, |x|

 
Abs(х)

 
Integer 
 
Real

 
Integer 
 
Real

 
Abs(-56)  
 
Abs(-2*0.15)

 
56 
 
3.00000000000000Е-0001

 
Арктангенс, arctg(x)

 
ArcTan(x)

 
Integer 
 
Real

 
Real 
 
Real

 
ArcTan(1)*180/Pi

 
4.50000000000000E+0001

 
Косинус, cos(x)

 
Cos(х)

 
Integer 
 
Real

 
Real 
 
Real

 
Cos(60*Pi/180)

 
5.00000000000000E-0001

 
Экспонента, ex

 
Exp(x)

 
Integer 
 
Real

 
Real 
 
Real

 
Exp(1) 
 
Exp(-1.5*2)

 
2.71828182845905E+0000 
 
4.97870683678639E-0002

 
Натуральный логарифм, ln(x)

 
Ln(x)

 
Integer 
 
Real

 
Real 
 
Real

 
Ln(3) 
 
Ln(0.12*10)

 
1.09861228866811E+0000 
 
1.82321556793955E-0001

 
pЧисло

 
Pi

 

 

 
Real

 
Pi

 
3.14159265358979E+0000

 
Синус, sin(x)

 
Sin(x)

 
Integer 
 
Real

 
Real 
 
Real

 
Sin(30*Pi/180)

 
5.00000000000000E-0001

 
Возведение в квадрат, х2

 
Sqr(х)

 
Integer 
 
Real

 
Integer 
 
Real

 
Sqr(4) 
 
Sqr(10.25)

 
16 
 
1.05062500000000E+0002

 
Квадратный корень

 
Sqrt(x)

 
Integer 
 
Real

 
Real 
 
Real

 
Sqrt(16) Sqrt(Sin(30*Pi/180))

 
4.00000000000000E+0000 
 
7.07106781186548E-0001

 
Дробное, представляющее целую часть вещественного

 
Int(х)

 
Integer 
 
Real

 
Real 
 
Real

 
Int(123) 
 
Int(123.448) 
 
Int(-345.555)

 
1.23000000000000E+0002 
 
1.23000000000000E+0002 
 
-3.45000000000000E+0002

 
Дробное, представляющее дробную часть вещественного

 
Frac(x)

 
Integer 
 
Real

 
Real 
 
Real

 
Frac(1.7) 
 
Frac(-25.14) 
 
Frac(-17)

 
7.00000000000000E-0001 
 
-1.40000000000000E-0001 
 
0.00000000000000E+0000

 
Целое, полученное отбрасывания дробной  части

 
Trunc(x)

 
Integer 
 
Real

 
Integer 
 
Integer

 
Trunc(123) 
 
Trunc(123.448) 
 
Trunc(-347.513)

 
123 
 
123 
 
-347

 
Целое, полученное путем округления вещественного

 
Round(x)

 
Integer 
 
Real

 
Integer 
 
Integer

 
Round(27.768) 
 
Round(35.432) 
 
Round(-24.815) 
 
Round(-97.264)

 
28 
 
35 
 
-25 
 
-97

 
Случайное число из диапазона 0.. 0.99

 
Random

 

 

 
Real

 
Random

 
2.32830643653870E-0010

 
Целое случайное число из диапазона 0..I

 
Random(I)

 
Integer

 
Integer

 
Random(1000)

 
318


 
В программах часто используются функции преобразования (табл. 1.4), обеспечивающие преобразование одних типов данных в другие типы, например, целые в строковые и наоборот. 
 
Таблица 1.4. Функции преобразования

 
Функция

 
Значение функции

 
Chr(n)

 
Символ, код которого равен n

 
IntToStr(k)

 
Строка, являющаяся изображением целого k

 
FloatToStr(n)

 
Строка, являющаяся изображением вещественного n

 
FloatToStrF(n,f,k,m)

 
Строка, являющаяся изображением вещественного n. При вызове функции указывают: f — формат (способ изображения); k — точность (нужное общее количество цифр); m — количество цифр после десятичной точки

 
StrToInt(s)

 
Целое, изображением которого является строка s

 
StrToFloat(s)

 
Вещественное, изображением которого является строка s


 
Обычно функции используют в качестве операндов выражений. Параметром функции  может быть константа, переменная или  выражение соответствующего типа. 
 
^ Поразрядные (битовые) булевские и сдвиговые операции могут применяться только к операндам целого типа. Действие этих операций выполняется поразрядно над двоичным представлением операндов в соответствии с таблицами истинности, приведенными в табл. 1.5. 
 
Таблица 1.5. Таблицы истинности для поразрядных булевских операций

 
X

 
Y

 
not X

 
X and Y

 
X or Y

 
X xor Y

 
0

 
0

 
1

 
0

 
0

 
0

 
0

 
1

 
1

 
0

 
1

 
1

 
1

 
0

 
0

 
0

 
1

 
1

 
1

 
1

 
0

 
1

 
1

 
0


 
Результат операции not: целочисленное значение, равное десятичному числу, которое соответствует поразрядно инвертированному двоичному представлению исходного операнда. 
 
Результат операции and (or, xor): целочисленное значение, равное десятичному числу, которое соответствует двоичному представлению поразрядно выполненной над исходными операндами логической операции И (ИЛИ, исключающее ИЛИ). 
 
Результат операции A shl В (A shr В): целочисленное значение, равное десятичному числу, полученному в результате поразрядного сдвига влево (вправо) двоичного представления операнда А на В разрядов. Освободившиеся при этом разряды заполняются нулями. 
 
Например, если А:=11; В:=2; то 
 
Десятичное значение Двоичное представление 
 
not А 244 11110100 
 
A and В 2 00000010 
 
A or В 11 00001011 
 
A xor В 9 00001001 
 
A shl В 44 00101100 
 
A shr В 2 00000010 
 
Для правильного написания арифметических выражений и исключения ошибок при получении результата рекомендуется соблюдать следующие ограничения и правила:

  1.  
    Запрещено последовательное появление знаков двух операций, поэтому А+-В запрещается, хотя А+(-B) – разрешается.
  2.  
    Операции с более высоким приоритетом выполняются раньше, чем операции с более низким (так, в выражении X*Y-D/4 сначала производится умножение и деление, лишь потом – вычитание).
  3.  
    Если все операции в выражении имеют одинаковый приоритет, то они выполняются последовательно слева направо (например, в выражении 2*H*J сначала 2 умножается на H и затем результат умножается на J); исключение составляет операция деления, которая реализуется справа налево, поэтому, например, А/В/С эквивалентно А/(В/C).
  4.  
    Часть выражения, заключенная в круглые скобки, выполняется в первую очередь (например, в выражении (А+В)*(С-D) умножение производится в последнюю очередь после сложения и вычитания).
  5.  
    Не следует записывать выражений, не имеющих математического смысла, например таких, как деление на нуль и т.п.
  6.  
    Следует следить за тем, чтобы значения выражений не выходили за пределы допустимых значений для объявленных типов переменных.

^

Выражения отношений

 
Выражение отношения определяет истинность или ложность результата сравнения. Они широко используются для управления циклами и в условных операторах.  
 
^ Операции отношения (табл. 1.6) выполняют сравнение двух операндов и определяют, истинно значение выражения или ложно, т.е. результатом этих операций является булевское значение True (Истина) или False (Ложь). 
 
Таблица 1.6. Операции отношения

 
Операция

 
Действие

 
^ Тип операндов

 
Тип результата

 
=

 
Равно

 
Совместимый простой, строковый или  указательный тип

 
Boolean

 
<>

 
Не равно

 
Совместимый простой, строковый или  указательный тип

 
Boolean

 
<

 
Меньше

 
Совместимый простой или строковый  тип

 
Boolean

 
>

 
Больше

 
Совместимый простой или строковый  тип

 
Boolean

 
<=

 
Меньше или равно

 
Совместимый простой или строковый  тип

 
Boolean

 
>=

 
Больше или равно

 
Совместимый простой или строковый  тип

 
Boolean


 
Сравниваемые величины могут принадлежать к любому простому или перечисляемому типу данных.  
 
При объединении в одном выражении арифметических операций и операций отношения первыми всегда выполняются арифметические. Например, результат выражения 14<11+4 – истина, так как операция сложения реализуется раньше операции сравнения. 
 
Выражение Результат 
 
12>=12 True 
 
56>10 True 
 
11<=6 False 
 
False<>True True 
 
'ABC'<'ABD' True 
 
'ABC'>'A' True 
 
Сравнивать можно данные любого одинакового типа кроме файлового. 
 
Следует избегать выражений отношения, подобных следующему: 1<=X<=50, так как 1<=X приводит к получению значения ^ True или False, которые не могут сравниваться с величиной 50. В этом случае надо воспользоваться скобками и логической операцией and: (1<=X) and (X<=50). 
 
При использовании операций отношения для строковых значений, сравнение выполняется посимвольно слева направо согласно значениям кодов символов расширенного набора ASCII. 
 
Все строковые значения независимо от длины считаются совместимыми. Кроме того, значения символьного типа также считаются совместимыми со значениями строкового типа, и обрабатываются как строки длиной в один символ. 
^

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

 
Логическим (булевским) выражением называется выражение, в котором используются операнды булевского типа (Boolean), в качестве операций выступают логические операции НЕ (not), И (and), ИЛИ (or), Исключающее ИЛИ (xor), а результатом выполнения выражения является логическое значение True или False (табл. 1.7). 
 
Таблица 1.7. Логические операции

 
Операция

 
Название

 
Пример

 
Значение А

 
Значение В

 
Результат

 
not

 
Логическое отрицание

 
not A

 
True 
 
False

 

 

 
False 
 
True

 
and

 
Логическое И

 
A and В

 
True 
 
True 
 
False 
 
False

 
True 
 
False 
 
True 
 
False

 
True 
 
False 
 
False 
 
False

 
or

 
Логическое ИЛИ

 
A or В

 
True 
 
True 
 
False 
 
False

 
True 
 
False 
 
True 
 
False

 
True 
 
True 
 
True 
 
False

 
xor

 
Исключающее ИЛИ

 
A xor В

 
True 
 
True 
 
False 
 
False

 
True 
 
False 
 
True 
 
False

 
False 
 
True 
 
True 
 
False


 
Простейшими видами логических выражений  являются: логическая константа, логическая переменная; элемент массива логического  типа, логическая функция, выражение  отношения. Другие логические выражения  строятся из вышеперечисленных путем  применения логических операций и круглых  скобок. Например, 
 
not ((A<5) or (B>=8) and (C xor D)) (X<=50) and (X>=1) xor (not (Z<>0)) 
 
Использование операции and вызывает много ошибок. Например, часто записывают в выражение, аналогичное следующему: A<10 and В<100, которое неявно предполагает наличие круглых скобок (A<(10 and В)<100), что служит причиной ошибки. Вместо такого выражения надо записать следующее: (A<10) and (В<100). 
 
Следует помнить, что приоритет булевских операций выше приоритета операций отношения. 
^

Символьные и строковые выражения

 
Символьное выражение порождает значение, имеющее символьный тип данных (Char). 
 
Формы символьных выражений: символьная константа, символьная переменная, элемент массива символьного типа, функция, предназначенная для работы с данными символьного типа. 
 
Значением переменной символьного типа может быть любой отображаемый символ:

  •  
    буква русского или латинского алфавитов;
  •  
    цифра;
  •  
    знак препинания;
  •  
    специальный символ, например, «новая строка».

 
Переменная символьного типа должна быть объявлена в разделе объявления переменных var. Инструкция объявления символьной переменной в общем виде выглядит так: 
 
Имя: char; 
 
где Имя — имя переменной символьного типа. Например, 
 
var 
 
otv: char;  
 
ch: char; 
 
Переменную типа char можно сравнить с другой переменной типа char или с символьной константой. Сравнение основано на том, что каждому символу поставлено в соответствие число (код), причем выполняются следующие соотношения: 
 
'0'<'1'< .. <'9'< .. <'A'<'B'< .. <'Z'<'a'<'b'< .. <'z' 
 
Символам русского (украинского) алфавита соответствуют числа большие, чем символам латинского алфавита, при этом справедливо следующее: 
 
'А'<'Б'<'В'< .. <'Ю'<'Я'<'а'<'б'<'в'< .. <'э'<'ю'<'я' 
 
В тексте программы вместо символа можно указать его код, поставив перед числом оператор #. Например, вместо константы 'в' можно записать #193. Такой способ записи, как правило, используют для записи служебных символов или символов, которые во время набора программы нельзя ввести с клавиатуры. К примеру, часто используемый при записи сообщений символ «новая строка» записывается так: #13. 
 
В программах обработки символьной информации часто используют функции Chr и Ord. Значением функции Chr является символ, код которого указан в качестве параметра. Например, в результате выполнения инструкции c:=chr(32) переменной с будет присвоено значение пробел. Функция Ord позволяет определить код символа, который передается ей в качестве параметра. Например, в результате выполнения инструкции k:=ord('*') переменная k будет содержать число 42 — код символа *. 
 
Операции, которые приводят к символьным выражениям, в языке отсутствуют. 
 
^ Строковыми выражениями являются выражения, в которых операндами служат строковые данные. Они состоят из строковых констант, переменных, указателей функций и знаков операций. 
 
Строковые переменные могут быть представлены следующими типами: Shortstring, Longstring и Widestring. Различаются эти типы предельно допустимой длиной строки, способом выделения памяти для переменных и методом кодировки символов. 
 
Переменной типа Shortstring память выделяется статически, т.е. до начала выполнения программы, и количество символов такой строки не может превышать 255. Переменным типа Longstring и Widestring память выделяется динамически — во время работы программы, поэтому длина таких строк практически не ограничена. 
 
Помимо перечисленных выше типов можно применять универсальный cтроковый тип ^ String. Тип String эквивалентен типу Shortstring. 
 
Переменная строкового типа должна быть объявлена в разделе объявления переменных var. Инструкция объявления в общем виде выглядит так: 
 
Имя: String; или Имя: String[длина] 
 
где Имя — имя переменной; длина — константа целого типа, задающая максимально допустимую длину строки. Например, 
 
var 
 
name: string[30]; 
 
buff: string; 
 
Если в объявлении строковой переменной длина строки не указана, то ее длина задается равной 255 символам. 
 
Над строковыми данными допустимы операция сцепления (конкатенации) и операции отношения. 
 
^ Операция сцепления (конкатенации), обозначаемая символом «+», применяется для соединения двух строк, в результате чего образуется строка, состоящая из символов обоих операндов, в которой символы второго операнда пристыковываются в конец символов первого операнда. Например, 
 
Выражение Результат 
 
'Object'+' Pascal' 'Object Pascal' 
 
^ 'ABC'+'D' 'ABCD' 
 
'Dom '+'Nomer '+'5/12' 'Dom Nomer 5/12' 
 
Операции отношения (=, <>, >, <, >=, <=) проводят сравнение двух строковых операндов и имеют приоритет более низкий, чем операции сцепления. Сравнение строк производится слева направо до первого несовпадающего символа, и та строка считается больше, в которой первый несовпадающий символ имеет больший номер в таблице символов ASCII. Результат выполнения операций отношения над строковыми операндами всегда имеет булевский тип и принимает значения True или False. 
 
Если сравниваемые строки имеют разную длину, но в общей части символы совпадают, считается, что более короткая строка меньше, чем более длинная. Строки считаются равными, если они полностью совпадают по длине и содержат одни и те же символы. Например, 
 
Выражение Результат 
 
'COSM1'<'COSM2' True 
 
'akkord'>'AKKORD' True 
 
'Printer '<'Printer' False 
 
'XXXXXX'>'XXXX' True 
 
'River Dnepr'='River Dnepr' True 
 
Допускается смешение в одном выражении операндов строкового и символьного типа. Если при этом символьной переменной присваивается значение строкового типа, длина строки должна быть равна единице, иначе возникнет ошибка выполнения. 
 
В язык ^ Object Pascal включено несколько полезных при работе со строками функций и процедур: 
 
1. Функция length(Строка) возвращает длину строки, т.е. количество символов в параметре Строка. Например, в результате выполнения инструкций 
 
n:=length('Иваненко'); 
 
m:=length(' Площадь космонавтов '); 
 
значение переменных n и m будет равно соответственно 8 и 21. 
 
2. ^ Процедура delete(Строка,р,n) позволяет удалить часть строки. Здесь Строка – переменная или константа строкового типа; р – номер символа, с которого начинается удаляемая подстрока; n – длина удаляемой подстроки. Например, в результате выполнения инструкций 
 
s:='Город Санкт-Петербург'; 
 
delete(s,7,6); 
 
значением переменной s будет строка 'Город Петербург'. 
 
3. Функция роs(Подстрока,Строка) позволяет определить положение подстроки в строке. Здесь Подстрока – строковая константа или переменная, которую надо найти в строковой константе или переменной Строка. Например, в результате выполнения инструкции 
 
р:=pos('Пе','Санкт-Петербург')
 
значение переменной р будет равно 7. Если в строке нет искомой подстроки, то значение функции роs будет равно нулю. 
 
4. ^ Функция сору(Строка,р,n) позволяет выделить фрагмент строки. Здесь Строка – выражение строкового типа, содержащее строку, фрагмент которой надо получить; р – номер первого символа, с которого начинается выделяемая подстрока; n – длина выделяемой подстроки. Например, в результате выполнения инструкций 
 
st:='Инженер Иванов'; 
 
fam:=copy(st,9,6); 
 
значением переменной fam будет строка 'Иванов'.

2. ОПЕРАТОРЫ ЯЗЫКА OBJECT PASCAL

 
Основная часть программы представляет собой последовательность операторов. Операторы предназначены для описания действий, которые будут выполнены при реализации алгоритма. 
 
Операторы выполняются последовательно, в том порядке, как они записаны в тексте программы. В зависимости от некоторых условий эта последовательность может нарушаться. 
 
Любому оператору может предшествовать метка, которая используется для передачи управления в эту точку программы с помощью операторов перехода goto. 
 
Операторы отделяются друг от друга символом точка с запятой (;), который не является частью оператора, - это разделитель операторов. Поэтому после последнего оператора программы и после последнего оператора в составном операторе, т.е. перед ключевым словом end, точку с запятой ставить не обязательно. Если же в указанном случае символ «;» все же поставлен, то считается, что после него расположен пустой оператор и ошибкой не является. 
 
Операторы языка подразделяются на две группы: простые и структурные. 
^

2.1. Простые операторы

 
Простые операторы — это такие операторы, которые не содержат в себе других операторов. К ним относятся операторы присваивания, процедуры, безусловного перехода и пустой. 
^

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

 
Оператор присваивания – основной оператор языка, состоящий из идентификатора переменной или пользовательской функции, символа присваивания «:=» и выражения.  
 
Формат оператора присваивания: 
 
Идентификатор := Выражение; 
 
Оператор присваивания выполняется следующим образом:

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

 
Оператор присваивания считается  верным, если тип выражения соответствует  или может быть приведен к типу переменной, получающей значение. Например, переменной типа real можно присвоить значение выражения, тип которого real или integer, а переменной типа integer можно присвоить значение выражения только типа integer. 
 
Так, например, если переменные i и n имеют тип integer, а переменная d — тип real, то операторы i:=n/10; i:=1.0; неправильные, а оператор d:=i+1; правильный. 
 
Во время компиляции выполняется проверка соответствия типа выражения типу переменной. Если тип выражения не соответствует типу переменной, то компилятор выводит сообщение об ошибке: Incompatible types ... and ..., где вместо многоточий указывается тип выражения и переменной. Например, если переменная n целого типа, то оператор n:=m/2 неверный, поэтому во время компиляции будет выведено сообщение: 
 
Incompatible types 'Integer' and 'Extended'. 
 
Допускается присваивание значений не только простых, но и структурированных типов, таких как массивы, записи и множества. 
 
Примеры использования операторов присваивания: 
 
var 
 
А,В,С: Real; 
 
i,j,k: Integer; 
 
Flag: Boolean; 
 
Begin 
 
B:=8; C:=5; j:=73; k:= 5; // Присваивание начальных значений 
 
A:=B*C; // Переменной А присваивается значение 40 
 
i:=j div k; // Переменной i присваивается значение 14 
 
Flag:=(i<>1) and (B<C); // Переменной Flag присваивается False 
 
End. 
^

Оператор вызова процедуры

 
Оператор вызова процедуры служит для активизации предварительно определенной пользователем процедуры или стандартной процедуры. Он состоит из идентификатора, непосредственно за которым располагается в круглых скобках список фактических параметров. Оператор процедуры без параметров состоит только из идентификатора процедуры. 
 
Формат оператора вызова процедуры: 
 
Имя_процедуры(Список_фактических_параметров); 
 
Указанные в операторе фактические параметры должны соответствовать описанным в заголовке процедуры формальным параметрам по типу, количеству и взаиморасположению. Перед активизацией тела процедуры происходит передача фактических параметров соответствующим формальным параметрам. Аналогичные действия выполняются при вызове методов, описанных в объектных типах. Например, 
 
Summa(A,m,n,Sum); 
 
Initialize; 
 
Swap(X,Y); 
^

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

 
Оператор безусловного перехода используется в тех случаях, когда после выполнения некоторого оператора надо выполнить не следующий по порядку оператор, а какой-либо другой, отмеченный меткой. 
 
Формат оператора безусловного перехода: 
 
Goto Метка; 
 
^ Выполнение оператора goto приводит к передаче управления на оператор, перед которым стоит указанная в операторе метка. 
 
При записи оператора goto необходимо учитывать следующее:

  •  
    метка оператора, на которую передается управление, должна быть описана в разделе описания меток того блока процедуры, функции, модуля, основной программы, в котором эта метка используется;
  •  
    областью действия метки является тот блок, в котором она описана; переход возможен только в пределах блока;
  •  
    попытка выйти за пределы блока или передать управление внутрь другого блока вызывает программное прерывание.

 
Пример использования операторов безусловного перехода: 
 
Program Test_Label; 
 
... 
 
Label P1,P2,P3; // Описание меток основной программы 
 
Procedure Blok1; // Начало описания пользовательской процедуры 
 
Label B1,B2; // Описание меток процедуры 
 
begin 
 
... 
 
B1: goto B2; // Переход к оператору, помеченному меткой B2 
 
... 
 
B2: goto P2; // Ошибка – попытка передать управление из блока 
 
end; 
 
Begin // Начало блока основной программы 
 
... 
 
P1: goto P2; // Переход к оператору, помеченному меткой Р2 
 
... 
 
P2: goto B1; // Ошибка – попытка передать управление в другой блок 
 
... 
 
P3: 
 
^ End. 
 
Использование оператора goto противоречит принципам структурного программирования, и его использование в программах не рекомендуется. Целесообразнее применять предопределенные процедуры:

Операторы языка Project Pascal