Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Алгоритмические языки высокого уровня. Курс лекций

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
940 Кб
Скачать

Целые числа в Pascal записываются в обычном виде, например: 0, +100,-56498. Следует учесть, что если целочисленная кон- станта выходит за указанные границы, компилятор дает сообщение об ошибке. Такие константы должны записываться с десятичной точкой, т.е. определяться как вещественные числа.

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

Первая форма запись числа в виде целой и дробной частей:

3.15, 0.1, +23.0125.

Вторая форма (с плавающей точкой) – это запись числа с мантис- сой и десятичным порядком, разделенными латинской буквой E. Та- кая запись означает, что мантисса (которая может быть целым чис- лом или вещественным числом в форме с фиксированной точкой) умножается на 10 в степени, задаваемой порядком (который всегда должен быть целым числом): -18.7Е+3, 2.123Е+4, 2.34Е-2,

6Е-1.

Вязыке программирования Pascal запрещается запись веществен- ных чисел в виде .5 или 5, их необходимо записывать как 0.5 и

5.0соответственно. Если в записи числа содержится точка, то, по крайней мере, одна цифра ей должна предшествовать и следовать за ней.

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

ссылки на переменные и типизированные константы (кроме констант в адресных выражениях);

вызовы функций (кроме тех, которые отмечены далее);

оператор получения адреса @ (кроме констант в адресных выражениях).

Ввыражениях-константах допускается использовать следующие стандартные функции: Abs, Chr, Hi, High, Length, Lo,

Low, Odd, Ord, Pred, Ptr, Round, SizeOf, Succ,

Swap, Trunc.

11

Примеры использования выражений-констант

Const

Min = 0; Max = 100;

Center = (Max - Min) div 2; Beta = Chr(255);

NumChars = Ord('Z') - Ord('A') + 1; Message = 'Out of memory';

ErrStr = 'Error:' + Message + '.'; ErrPos = 80 - Length(Error) div 2; ErrAttr = Blink + Red * 16 + White; Ln10 = 2.302585092994095684;

Ln10R = 1 / Ln10; Numeric = ['0'..'9'];

Alpha = ['A'..'Z','a'..'z']; AlphaNum = Alpha + Numeric; DD = $7F;

Шестнадцатеричное число состоит из шестнадцатеричных цифр, которым предшествует знак доллара $ (код 36 в ASCII). Диапазон шестнадцатеричных чисел от $00000000 до $FFFFFFFF.

Логическая константа это слово FALSE (ложь), либо слово TRUE (истина).

Символьная константа это любой символ ПК, заключенный в апострофы: 'z' символ z; 'Ф' символ Ф. Если необходимо запи- сать как символьную константу сам апостроф ('), он удваивается: '''. Допускается использование записи символа путем указания его внут- реннего кода, которому предшествует символ # (код 35): #97 – сим- вол а; #90 – символ Z; #39 – символ '; #13 – символ CR.

Строковая константа любая последовательность символов (кроме символа CR – возврат каретки), заключенная в апострофы. Если в строке нужно указать сам символ апострофа, он удваивается.

А='Это - строка символов' – cтрока на экране:[Это -

строка символов]

B= 'That'''s string' – cтрока на экране:[ That's string]

Строка символов может быть пустой, т.е. не иметь никаких сим- волов в обрамляющих ее апострофах.

Строку можно составлять из кодов нужных символов с предшест- вующими каждому коду символами #: К примеру такая запись #83#121#109#98#11#108 эквивалентна строке 'Symbol'. Здесь 83 – код символа S, 121 – y и т.д.

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

12

вставлять в строки любые управляющие символы, в том числе и сим- вол CR (код 13): СС=#7'Ошибка !'#13'Нажмите любую клавишу ...'#7 .

2.3. Идентификаторы и переменные

Важным элементом исходного текста программы являются иден- тификаторы.

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

идентификатор может состоять из букв латинского алфави- та, цифр, знака подчеркивания (другие символы в описании недопус- тимы);

идентификатор не может начинаться с цифры;

идентификатор не может совпадать ни с одним из зарезер- вированных слов;

длина идентификатора может быть произвольной, но зна- чащими считаются первые 63 символа.

Пример программы (использования описания идентификаторов)

Program Stepen; Var

A,B: Real;

N: Integer; Begin

Writeln('Программа возведения числа в степень'); Write('Введите число = '); Readln(A); Write('Укажите степень = '); Readln(N);

Writeln; B:=Exp(N*Ln(A));

Writeln('Результат:');

Writeln('B= ',B:8:2); Readln

End.

В примере Stepen, A,B,N правильные идентификаторы. Переменная это область оперативной памяти, занимающая не-

сколько ячеек и имеющая свое имя. Переменная обладает следую- щими свойствами:

переменная хранит не более 1 значения;

переменная способна хранить значения только одного типа;

13

переменная хранит значение до тех пор, пока в нее не по- местят новое значение, при этом предыдущее значение переменной стирается;

значение переменной может быть вызвано для использова- ния сколько угодно раз без изменения оригинала (значения);

в начале выполнения программы содержимое переменной считается неопределенным;

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

Различные типы данных занимают в оперативной памяти ПК раз- ное количество ячеек (емкость одной ячейки – 1 байт). Перед нача- лом вычислений следует сообщить ПК, сколько ячеек памяти надо зарезервировать под ту или иную переменную. Для этого в блоке «VAR» раздела описаний программы должны быть описаны все ис- пользуемые переменные, т.е. должно быть указано имя каждой пере- менной и типы данных, которые будут храниться в этих переменных.

Внастоящее время в профессиональном программировании при- нято записывать имена переменных с использованием так называе- мой венгерской нотации.

Венгерская нотация это соглашение о наименованиях пере- менных и функций. Соглашение широко используется при програм- мировании на языках Pascal, C и в среде WINDOWS. Венгерская но- тация основывается на следующих принципах:

имена переменных и функций должны содержать префикс, описывающий их тип;

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

Префиксы записываются малыми буквами, первая буква каждого слова заглавная, префиксы и слова записываются либо слитно, ли- бо через символ _ (подчеркивание).

Для языка Pascal рекомендованы префиксы для скалярных пере- менных и функций, приведенные в табл. 2.1.

14

 

 

 

 

 

Таблица 2.1

 

Префиксы, используемые в именах переменных

 

 

 

 

 

 

 

Префикс

Тип

Префикс

Тип

 

 

 

 

 

 

1

by

Byte

11

ch

Char

2

sh

Shortint

12

b

Boolean

3

i

Integer

13

p

Pointer

4

w

Word

14

ar

Array

5

l

Longint

15

s

String

6

r

Real

16

sz

Stringz

7

si

Single

17

se

Set

8

d

Double

18

re

Record

9

e

Extended

19

f

File

10

c

Comp

20

t

Text

Пример: Var rV, arVector[1..20], sName, iCount.

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

2.4. Служебные (ключевые и зарезервированные) слова

Любая программа на Pascal начинается словом PROGRAM и со- держит объявление имени программы. Слово PROGRAM зарезервиро- вано в Pascal, т.е. не может использоваться ни в каких иных целях, кроме как для объявления имени программы. В Pascal имеется мно- жество зарезервированных слов. Любое из них нельзя использовать в качестве идентификатора (имени) какого-либо объекта программы переменной, константы и т.д. Смысл зарезервированных слов строго зафиксирован (каждое слово предназначено для описания опреде- ленных действий). Служебные слова нельзя использовать не по на- значению. При этом набор зарезервированных слов может меняться от версии к версии. Происходит это потому, что в качестве новой версии языка появляются дополнительные возможности, для реали- зации которых нужны новые зарезервированные слова. В то же вре- мя некоторые из старых зарезервированных слов перестают быть та- ковыми. Делается это для лучшей переносимости программ.

Основные зарезервированные слова:

absolute директива, с помощью которой определяется абсо- лютный адрес переменных, функций или процедур;

and, or, xor, not директивы логических операций; array используется для описания переменных типа «массив»;

15

begin, end – «операторные скобки». Любая программа начина- ется со слова begin и заканчивается словом end с точкой (end.). Внутри «операторных скобок» может находиться любой набор опе- раторов, действий или выражений. Операторы всегда отделяются друг от друга точкой с запятой «;»;

case оператор выбора вариантов (для реализации разветвления процесса);

if <операторы> then <операторы> else <операто-

ры> оператор «разветвления» вычислительного процесса (возмож- но два разветвления: да в этом случае выполняются операторы, стоящие после then, или нет выполняются операторы, стоящие после else);

const описание констант;

object, constractor, destructor, virtual дирек-

тивы для работы с объектами;

do(downto), for, to, while, repeat, until опера-

торы цикла;

file описание переменной типа «файл»;

forward директива, которая говорит о том, что вызывается процедура или функция, описаниe которой в программе будет после; function, procedure директива описания процедур и

функций;

implementation, interface, unit, uses директивы для описания модулей и библиотек;

mod операция взятия остатка от деления по модулю; div операция целочисленного деления;

program идентификатор названия программы; set описание переменной типа «множество»;

string описание переменной типа «строка» (массив симво- лов);

var описание переменных;

type описание типов переменных;

goto(label) переход на определенное место в программе; in операция проверки принадлежности элемента множеству; nil нулевая ссылка (нулевой адрес динамической переменной); record описание переменной типа «запись».

16

2.5. Выражения и операции

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

Примеры выражений

У

21

(а + b) * с sin(t)

а > 2

not Flag and (a=b) NIL

[1, 3. .7] * set1

Основным требованием к записи выражения в Pascal является раз- мещение всех его элементов в одной строке. В выражениях допуска- ется использовать константы (неизменяемый объект программы), переменные (объект программы, который может изменять свое зна- чение), операции (например: + , - , / , * и др.) и функции.

Пример: выражение (6-x)x+10(xy-6xyz) xy-yz-zx

выражение на Pascal:

((6-x)*x+10*(x*y-6*x*y*z))/(x*y-y*z-z*x).

2 2

Пример: выражение sinx +cosy

2 e(2x-5)

выражение на Pascal:

(Sqrt(Sin(x*x)+Cos(y*y)))/Exp(Sqr(2*x-5)).

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

17

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

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

Унарные: not (отрицание), @;

Пример: not (5 > 7) истина, not (5 > 2) – ложь.

Мультипликативные: *, /, div (деление нацело), mod (остаток от целочисленного деления),and (ло-

гическое «И»), shl, shr;

Пример: 3 div 2 равно 1, +5 mod 2 равно 1. Пример: (5 > 2) and (4 > 7) ложь,

(7 > 3) and (2 < 6) истина.

Аддитивные: +, -, or (логическое "ИЛИ"), xor (исключаю- щее «ИЛИ»);

Пример: (5 > 2) or (3 > 8) истина, (1 > 4) or (10 > 50) ложь.

(5 > 2) xor (3 < 8) ложь.

Операции отношения: =, <>, <, >, <=, >=,in

Пример: (8 >= 7) истина, (5 <= 2) ложь.

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

Примечание. В Pascal нет операции возведения в степень. Вместо этого для возве- дения в целую степень можно использовать операцию умножения, а в дробную выражение, использующее операцию логарифмирования и потенцирования: xy=ey*lnx, что на языке Pascal соответствует выражению exp(y*ln(x)) с исполь- зованием двух стандартных функций exp(<выражение>) и ln(<выражение>).

18

Pascal – типизированный язык. Он построен на основе строгого соблюдения концепции типов, в соответствии с которой все приме- няемые в языке операции определены только над операндами со- вместимых типов.

Два типа считаются совместимыми, если:

оба они есть один и тот же тип;

оба вещественные;

оба целые;

один тип тип-диапазон второго типа;

оба являются типами-диапазонами одного и того же базово-

го типа;

оба являются множествами, составленными из элементов одного и того же базового типа;

оба являются строками одинаковой максимальной длины;

один тип тип-строка, а другой тип-строка, или символ;

один тип любой указатель, а другой нетипизированный указатель;

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

Совместимость типов имеет значение в операторах присваивания. Пусть T1 тип переменной, а Т2 тип выражения. Операция при-

сваивания: T1 := T2 возможна в следующих случаях:

T1 и T2 есть один и тот же тип и этот тип не относится к файлам или массивам файлов, или записям, содержащим поля- файлы, или массивам таких записей;

T1 и T2 являются совместимыми порядковыми типами, и значение T2 лежит в диапазоне возможных значений T1;

T1 и T2 являются вещественными типами, и значение T2 лежит в диапазоне возможных значений T1;

T1 вещественный тип, а T2 целый тип;

T1 строка, а T2 символ;

T1 строка, а T2 упакованная строка;

T1 и T2 совместимые упакованные строки;

T1 и T2 совместимые множества, и все члены T2 при- надлежат множеству возможных значений T1;

T1 и T2 совместимые указатели;

T1 и T2 совместимые процедурные типы;

19

T1 объект, а T2 его потомок.

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

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

азначения другого. Это функции ORD, TRUNC, ROUND, CHR,

PTR (преобразует четырехбайтный целочисленный аргумент к типу- указателю).

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

Имя_Типа (переменная или значение)

Допустимы следующие вызовы функций:

type

МуТуре = (а, Ь, с, d);

.....

МуТуре (2) Integer ('D')

pointer (longint(a)+ $FF) Char (127 mod c)

Byte (k)

При автоопределенном преобразовании типа выражения может произойти изменение длины его внутреннего представления (длина может увеличиться или уменьшиться).

Неявное преобразование типов возможно только в двух случаях:

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

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

Совмещение данных в памяти может произойти при использова- нии записей с вариантными полями, типизированных указателей, содержащих одинаковый адрес, а также при явном размещении дан-

20

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]