Логические типы

Стандартный логический тип Boolean (размер - 1 байт) представляет собой тип данных, любой элемент которого может принимать лишь два значения: True и False (false<true).

В Турбо Паскале есть три логических типа: bytebool(1 байт), wordbool (2 байта), longbool (4 байта). Они введены для унификации с другими языками программирования и со средой Windows.

Для всех логических типов значению false соответствует число 0, записанное в соответствующее количество байтов. Значению True для типа Boolean соответствует число 1, записанное в его байт, а для других типов значению True соответствует любое число, отличное от нуля.

Ord(false)=0; Ord(true)=1; Succ(false)=true; Pred(true)=false.

Символьный тип

Стандартный символьный тип Char определяет полный набор ASCII - символов. Функция Ord от величины типа Char даёт код соответствующего символа. Сравниваются величины символьного типа по своим кодам.

Перечисляемый тип

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

type

<имя типа>=(<идентификатор 1, идентификатор 2,…, идентификатор №>);

Важно, в каком порядке перечислены идентификаторы при определении типа, т. к. первому идентификатору присваивается порядковый номер 0, второму – 1 и т. д.

Один и тот же идентификатор можно использовать в определении только одного перечисляемого типа. Функция Ord от величины перечисляемого типа даёт порядковый номер её значения.

Пример Перечисляемый тип

type

Operat=(Plus, Minus, Mult, Divide);

Boolean=(False, True);

Логический тип является частным случаем перечисляемого типа.

Пример

Program Code_of_Char; {Программа читает символ с клавиатуры и выводит на экран этот символ и соответствующий ему внутренний код}

var

ch: Char; {В эту переменную читается символ}

begin

write(‘Введите любой символ:’);

readln(ch); {Читает символ}

writeln(ch,’=’, ord(ch)); {Преобразует его к целому и выводит на экран}

end.

Тип-диапазон

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

type

<имя типа>=<мин. значение>..<макс. значение>;

Минимальное значение при определении такого типа не должно быть больше максимального.

Пример Определение типов-диапазонов.

type

Dozen=1..12; {числа от 1 до 12}

AddSub=Plus..Minus; {Операции сложения и вычитания}

Вещественные типы

В стандартном Паскале – только один вещественный тип Real. В Турбо Паскале– пять стандартных вещественных типов: Real, Single, Double, Extended, Comp.

Тип

Диапазон

Число значащих чисел

Размер в байтах

Real

2.9*10-39..1.7*1038

11-12

6

Single

1.5*10-45..3.4*1038

7-8

4

Double

5.0*10-324..1.7*10308

15-16

8

Extended

3.4*10-4932..1.1*104932

19-20

10

Comp

-263+1..263-1

19-20

8

Тип Single, Double, Extended и Comp можно использовать только при наличии арифметического сопроцессора или при включенном эмуляторе сопроцессора.

Замечание

Тип переменной позволяет не только устанавливать длину её внутреннего представления, но и контролировать те действия, которые выполняются над ней в программе.

В Турбо Паскале не допускается (почти невозможно) автоматическое преобразование типов. Исключение только в отношении констант и переменных типа integer, которые дополнительно используются в выражениях типа Real.

В Турбо Паскале есть средства преобразования данных, но они используются явно (по определенным правилам). Например, встроенная функция преобразует Real в Integer. Round выполняет округление до целого. Trunc отбрасывает дробную часть. CHAR преобразует целое в символ.

ORD преобразует символ в целое.

Выражения

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

Переменные

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

-  разделе объявления переменных программы;

-  разделе объявления переменных подпрограммы;

-  разделе объявления переменных модуля;

-  заголовке подпрограммы.

Раздел объявления переменных начинается зарезервированным словом var, за которым следуют объявления конкретных переменных, состоящие из имени переменной (имени через запятую), двоеточия и типа переменной (переменных). Каждое объявление завершается точкой с запятой.

var

<список переменных 1>:<тип 1>;

………………………………………...

<список переменных N>:<тип N>;

НЕ нашли? Не то? Что вы ищете?

В разделе объявления переменных наряду с предопределенными типами можно использовать типы, объявленные в разделе объявления типов, а также новые, вводимые только для конкретных переменных.

Описание переменной должно содержать два элемента: имя переменной и её тип. Имя задается идентификатором.

Пример

var

a: integer; {стандартный (предопределенный) целый тип }

index: 0…5; { тип переменной Index задан типом-диапазоном,

включающим целые числа от 0 до 5}

s: Char; {стандартный (предопределенный) символьный тип }

sinus: Real; {стандартный (предопределенный) действительный

тип }

Semaphore: (Opened, Closed);{тип переменной Semaphore задан путем

перечисления всех возможных

значений (двух), которые обозначены

идентификаторами Opened и Closed}

Пример

var

x, y, z: real;

Ind 1, Ind 2: 1…100;

Det 1, Det 2, Det 3: (Wood, Steel, Glass);

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

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

Пример

type

Index = 1…100;

Det = (Wood, Steel, Glass);

var

x, y, z: real;

Ind 1, Ind 2: Index;

Det 1, Det 2, Det 3: Det;

В заголовке подпрограммы при определении переменных можно использовать лишь стандартный или ранее определенный тип.

Пример

type

Operat = (Plus, Minus, Multiply, Divide);

var

x, y, z: real; {предопределенный тип}

i, y, k: integer;

Operator: Operat; {ранее определенный тип}

Digit: 0…9; {объявление нового типа}

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

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

Глобальные переменные постоянно располагаются в памяти, локальные размещаются в стеке лишь на время выполнения подпрограммы, затем область стека освобождается.

Константы

Определение Константами называются параметры программы, значения которых не меняются в процессе её выполнения.

Возможно:

-  непосредственное использование значения констант;

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

Задание констант идентификаторами осуществляется в разделе объявления констант, начинающемся зарезервированным словом const. В Турбо Паскале возможно задание констант идентификаторами двумя вариантами:

-  обычные константы, тип которых определяется их значением;

-  типизированные константы, для которых в явном виде указывается их тип.

Обычные константы могут быть целого, вещественного, символьного, логического типа и типа string, типизированные константы – любого типа, кроме типа файл ( или содержащего компоненту типа файл).

Для обычных констант задаются их имена и значения, разделенные знаком равенства:

const

<имя константы 1> = <значение 1> ;

…………………………………………..

<имя константы N> = <значение N> ;

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

Целые константы

В изображении целых констант присутствуют лишь знак и цифры (знак + можно не указывать). Предполагается десятичная система счисления, однако можно использовать и шестнадцатеричную. В этом случае перед константой следует поставить знак $. Диапазон целых десятичных чисел – от - до , а шестнадцатеричных – от $ до $FFFFFFFF. В Турбо Паскале заданы два предопределенных целых числа:

MaxInt = 32767 и MaxLongInt = .

Вещественные константы

Вещественные константы в своём изображении содержат десятичную точку или (и) показатель степени (символ Е или е.

Пример

const

X = -0.5; {представление с десятичной запятой (точкой)}

Y = 1.0; {представление с десятичной запятой (точкой)}

Z = -1E – 5; {представление с плавающей запятой (точкой)}

W = 7.5e + 15; {представление с плавающей запятой (точкой)}

m E(e) p - p включает знак ± и целое число;

m может быть целым и числом с десятичной запятой (точкой).

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

Определение Строка символов – это последовательность любого, в том числе и равного нулю, количества символов из набора ASCII, расположенных на одной строке и заключенных в апострофы.

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

Строка, состоящая из одного символа, называется символьной константой.

Если между апострофами нет ни одного символа, то такая строка называется нулевой строкой.

При необходимости поместить в строку символ “апостроф”, его следует записать дважды.

Для включения в строку символов, не имеющих физического изображения, используется их ASCII – код с символом # перед ним. Для изображения управляющих символов (коды от 0 до 31) можно использовать символ ^ и соответствующую букву, код которой равен коду управляющего символа плюс 64.

Пример Строковые константы.

const

Symbols = ‘TURBO’ ;

Apostroph = ’ ’ ’ ’ ;

TwoLines = ‘Line1’ #13#10 ’Line2’ ;

Return = ^M^J; {Коды управляющих символов 13 и 10}

Пример

Const

One=1;

High limit = 1000;

Low limit = - High limit;

Max real = 1.7E38;

Separator = ‘*****’;

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

Предпочтительнее в программе использовать вместо константных значений идентификаторы. Программу легче читать и понимать. В случае необходимости достаточно изменить значение константы в разделе объявления констант.

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

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

Пример

Const

Maximum: integer = 9999;

Rea: Real = 0.5;

Bell: Char = #7;

Константные выражения

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

В них используются следующие функции: Abs, Chr, Hi, High, Length, Lo, Low, Odd, Ord, Pi, Pred, Ptr, Round, SizeOf, Succ, Swap, Trunc.

function Abs(x : < вещ. или целый тип >):< вещ. или целый тип >;

возвращает абсолютное значение аргумента.

function Chr (x:Byte) : Char ;

возвращает символ с указанным кодом.

х – число, определяющее код символа.

function Hi (x: < целый тип >) : Byte;

возвращает старший байт аргумента;

х – выражение типа integer или word;

function High (x: <тип>) : Word;

возвращает максимальное значение величины.

х – параметр или идентификатор порядкового типа, типа – массива, типа – строки или открытого массива.

function Length (s:string) : Integer;

возвращает текущий размер строки;

s – строка, у которой определяется размер.

function Lo (x: <целый тип> ) : Byte;

возвращает младший байт аргумента;

х – выражение типа Integer или Word.

function Low (x: <тип> ) : Word;

возвращает минимальное значение величины;

х – параметр или идентификатор порядкового типа, типа – массива, типа – строки, открытого массива.

function Odd (x: <longint> ) : Boolean;

проверяет, является ли аргумент нечётным числом;

(True – если нечётное, False – если чётное)

function Ord (x: <порядковый тип> ) : Longint;

возвращает номер значения порядкового типа (нумерация начинается с нуля);

х – выражение любого порядкового типа.

function Pi :Real;

Возвращает значение числа (3.).

Число значащих цифр после запятой зависит от того, при каком ключе (директиве) {$N+} производится компиляция.

{$N-}

function Pred (x: <порядковый тип> ) : <порядковый тип>;

для выражения с порядковым типом получает предшествующее значение;

х – выражение порядкового типа, для которого определяется предшествующее значение.

Аварийная ситуация возникает, если предшествующего значения нет.

function Ptr (Seg, Ofs : Word) : Pointer;

преобразует адрес (адрес сегмента и смещение) в указатель;

Seg – адрес сегмента;

Ofs – смещение адреса.

function Round (x: Real) : Longint;

округляет вещественное число до целого;

аварийная ситуация возникает в случае, если результат округления выходит за пределы (границы) значения типа Longint.

function SizeOf (x) : Word;

возвращает размер аргумента в байтах;

х – переменная любого типа или любой тип.

function Succ (x: <порядковый тип> ) : порядковый тип;

для выражения порядкового типа возвращает последующее значение;

х – выражение порядкового типа, для которого определяется последующее значение;

аварийная ситуация возникает, если последующее значение не существует.

function Swap (x: <целый тип> ) : <целый тип>;

меняет местами младший и старший байты аргумента;

х – выражение типа Integer или Word.

function Trunc (x: Real) : Longint;

выделяет целую часть вещественного числа;

аварийная ситуация возникает в случае, если результат выходит за границы типа Longint.

Пример Константные выражения.

$D00 (выражение, состоящее из константы)

‘Z’ (выражение, состоящее из символьной константы)

Pi/4

‘Turbo’+’-‘+’Pascal’ (объединение строк)

Пример

Const

Min = 0;

Max = 100;

Center = (Max – Min) div 2;

Message := ‘Out of memory’;

Error Txt := ‘Error:’ + Message +’.’;

Error Pos = 80-Length (Error Txt) div 2;

Ln10 = 2.;

Ln10R = 1/Ln10;

Типизированные константы

Типизированные константы фактически представляют собой инициализированные переменные и могут использоваться наравне с обычными переменными, в том числе и в левой части операции присваивания. Для каждой такой константы задаётся её имя, тип и начальное значение. Тип от имени отделяется двоеточием, начальное значение от типа – знаком равенства.

const

<имя константы> : <тип константы> = <значение константы>;

Основные моменты, характеризующие типизированные константы

-  ТК описываются в разделе объявления констант.

-  ТК получают при описании начальные значения.

-  Аналогично переменным могут получать новые значения (название констант достаточно условно). Можно их использовать как переменные таких же типов.

Пример

Max: integer = 9999;

Min: real = 0;

MyArray: array[1..3] of Color = (Red, Green, Blue);

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

Стандартные функции

В языке Pascal существует ряд заранее разработанных подпрограмм-функций, которые можно использовать как готовые объекты. В Турбо Паскале их количество увеличено, и они все объединены в стандартные модули.

Арифметические функции

Арифметические функции можно использовать только с величинами целого и вещественного типа.

Функции

Назначение

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

ABS(x)

абсолютное значение аргумента

совпадает с типом х

Arctan(x)

арктангенс аргумента

вещественный

cos(x)

Косинус

--//--

exp(x)

--//--

Frac(x)

дробная часть

--//--

Int(x)

целая часть

--//--

Ln(x)

натуральный логарифм

--//--

Pi

значение p

--//--

sin(x)

синус

--//--

Sqr(x)

Квадрат

совпадает с типом х

Sqrt(x)

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

вещественный

{$N+} Extended {3.E+0000}

{$N-} Real {3.E+00 }

begin

P:=Pi;

end;

Функции преобразования типов

1.  Chr(x)

2.  High(x)

3.  Low(x)

4.  Ord(x)

5.  Round(x)

6.  Trunс(x)

Эти функции используются для преобразования типов величины, например, символов в целое число, вещественного в целое и т. д. См. стр. 20, 21.

1. Преобразование ASCII-кода в символы Chr(x), где х-аргумент целого типа в диапазоне [0..255]. Результат - символ, соответствующий данному коду.

2. High(x)-получение максимального значения величины.

Результат функции для:

-  величины порядкового типа - максимальное значение величины;

-  типа - массива – максимальное значение индекса;

-  типа - строки – объявленный размер строки;

-  открытого массива – количество компонент массива минус 1 (нумерация начинается с 0).

3. Low(x) – получение минимального значения величины.

Аргумент функции параметр или идентификатор порядкового типа, типа - массива, типа - строки или открытый массив.

4. Ord(x) – преобразование любого порядкового типа в целый тип.

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

Результат – величина типа LongInt.

5. Round(x) – округление вещественного числа до ближайшего целого.

Аргумент – величина вещественного типа.

Результат – округлённая до ближайшего целого величина типа LongInt.

Если результат выходит из диапазона значений LongInt, то при выполнении программы возникает ошибка.

6. Trunc(Х) – получение целой части вещественного числа.

Аргумент – величина вещественного типа.

Результат – тип LongInt, целая часть этого числа.

Если результат выходит из диапазона значений LongInt, то при выполнении программы возникает ошибка.

Функции для величин порядкового типа

1.  Odd(x)

2.  Pred(x)

3.  Succ(x)

Эти функции позволяют выполнить ряд действий над величинами порядкового типа (найти предыдущий или последующий элемент, проверить на чётность/нечётность).

1. Odd(x) – проверка величины Х на нечётность.

Аргумент – величина типа LongInt.

Результат – равен True, если элемент нечётный, False – чётный.

2. Pred(x) – определение предыдущего значения величины Х.

Аргумент – величина любого порядкового типа.

Результат – предшествующее значение того же типа.

При применении функции к первому элементу последовательности возникает ошибка.

3. Succ(x) – определение последующего значения величины Х.

Аргумент – величина любого порядкового типа.

Результат – предшествующее значение того же типа.

При применении функции к последнему элементу последовательности возникает ошибка.

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

-  Арифметические операции;

-  Логические операции;

-  Операции с битами информации;

-  Операции со строками;

-  Операции отношения;

-  Операция адресации @.

Типы операндов должны быть либо идентичные, либо совместимые.

Арифметические операции

Арифметические операции применяются только к величинам целых или вещественных типов. Их делят на унарные и бинарные операции.

+ не оказывает никакого влияния на значение величины (целых или вещественных типов).

- меняет знак величины.

Бинарные операции сведены в таблице:

Знак

Операции

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

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

+

Сложение

Целые, хотя бы один вещественный

Целый или вещественный

-

Вычитание

Целые, хотя бы один вещественный

Целый или вещественный

*

Умножение

Целые, хотя бы один вещественный

Целый или вещественный

/

Деление

Целый или вещественный

Вещественный

Div

Деление целых чисел

Целый

Целый

Mod

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

Целый

Целый

{$N+} - Результат будет типа Extended, в противном случае Real.

Делитель ≠ 0. Если используется знак операции, являющийся служебным словом, то он должен быть отделен от операндов хотя бы одним разделителем.

Логические операции

Логические операции применяются к величинам логического типа. Результат операции – величина логического типа.

Одна унарная логическая операция – not (отрицание). Три бинарные операции: and (и), or (или), xor (исключающее или).

Таблица истинности операции not

X

not x

False

True

True

False

Таблица истинности операций and, or, xor

x

Y

X and y

x or y

x xor y

False

False

False

False

False

False

True

False

True

True

True

False

False

True

True

True

True

True

True

False

Таблица истинности операций and, or

x

y

x and y

x or y

0

0

0*0

0+0

0

1

0*1

0+1

1

0

1*0

1+0

1

1

1*1

1+1

В Турбо Паскале выполняется два вида вычислений логических выражений: полное и укороченное.

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

Выбор вида вычисления осуществляется с помощью ключа компилятора $B:

{$B+} – полное вычисление логических выражений;

{$B-} – укороченное вычисление логических выражений.

Ключ является локальным. По умолчанию используется {$B-}.

Операции отношения

Операции отношения используются для сравнения двух величин. Результат сравнения имеет логический тип.

=

- равно

<> 

- не равно

- меньше

<=

- меньше или равно

>=

- больше или равно

- больше

Операции отношения используются также для указателей, строк, множеств.

Круглые скобки

В первую очередь выполняются действия над значениями, заключенными в скобки. Они должны быть либо непересекающимися, либо вложенными друг в друга. ((( должно быть равно ))).

Порядок вычисления выражений

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

Таблица приоритетов действий при вычисления выражений

Группа

Тип действий

Операции или элементы

1

Вычисление в круглых скобках

( )

2

Вычислений значений функций

Функции

3

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

@ ,not, унарный +, унарный -

4

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

*, /, div, mod, and, shl, shr

5

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

+, -, or, xor

6

Операции отношения

=, <>, <, >, <=, >=, in

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

Операции с битами информации

Операции not, and, or, xor можно использовать для побитовых операций с целыми числами: not – унарная операция инверсии всех битов целого типа; and – побитовая логическая операция И двух целых чисел; or - побитовая логическая операция ИЛИ двух целых чисел; xor - побитовая логическая операция ИСКЛЮЧАЮЩЕЕ ИЛИ двух целых чисел.

Тип результата – целое число, бит которого формируется из битов операндов по следующим правилам.

Таблица правил выполнения побитовых операций

Операнд 1

Операнд 2

not

and

or

xor

1

-

0

-

-

-

0

-

1

-

-

-

0

0

-

0

0

0

0

1

-

0

1

1

1

0

-

0

1

1

1

1

-

1

1

0

К этой группе относятся две операции:

shl - операция I shl J сдвигает содержимое I на J битов влево. Освободившиеся биты заполняются нулями.

Shr- операция I shr J сдвигает содержимое I на J битов вправо. Освободившиеся биты заполняются нулями.

Замечание При вводе данных с клавиатуры выполняются действия, пока не конец файла. Конец файла вводится с помощью клавиш Ctrl-Z (символ SUB, код 26). Код формируется как 90-64=26.

Дополнение

Операция

Действие

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

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

not

отрицание

любой целый

тип операнда

and

логическое И

Любой целый

наименьший целый

or

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

любой целый

наименьший целый

xor

логическое исключающее ИЛИ

любой целый

наименьший целый

@

адрес

Любой

указатель

Унарная операция @ применяется к операнду любого типа и возвращает результат типа Pointer, в котором содержится адрес операции.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4