Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник 139.docx
Скачиваний:
4
Добавлен:
30.04.2022
Размер:
206.28 Кб
Скачать

3.1. Лексика и конструкции языка

В языке ПАСКАЛЬ используются следующие символы.

1. Буквы: А, В, С, D, Е, F, G, Н, I, J, К, L, М, N, О, Р, Q, R, S, Т, U, V, W, Х, Y, Z, $, _.

2. Специальные символы: +, -, *, /, =, <>, <=, >=, (, ), (*, *), ;=, ., ,, !, @, ;, :, ‘, ,.., { }.

3. Цифры: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

Язык ПАСКАЛЬ включает комментарии, разделители, идентификаторы, ключевые слова, данные и операции над ними.

Комментарием может быть любая последовательность символов, ограниченная сочетаниями символов: (* и *) или { и }.

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

Символ подчеркивания « _ » считается буквенным и используется в основном для образования сложных идентификаторов.

Пример. Словосочетание

IT_IS_MY_FIRST_PROGRAM

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

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

3.2. Типы данных. Структуры данных

Конкретизируем общие понятия, изложенные в разделе 2, для языка программирования ПАСКАЛЬ.

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

Константы. Они не меняют своего значения в процессе выполнения программы. Константами могут быть числа, символы, строки символов. Числами в языке ПАСКАЛЬ называются последовательности цифр, записанных по определенным правилам. Например, целое число 1024 можно записать в виде 1.024 Е +3; дробное число 3,14 – в виде 314 Е-2; число со знаком -3,14 – в виде -314 Е-2.

Символ Е отделяет порядок десятичного числа.

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

Например, ’A’, ’Х’, ’I’ – символьные константы;

’Шевалье д’’Артаньян’ – строка, при этом апостроф внутри строки записывается дважды.

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

Типы данных. В языке ПАСКАЛЬ различают следующие типы данных (рис. 2): простые и сложные (структурированные).

Рис. 2. Типы данных

Простые типы включают порядковые и вещественные.

К порядковому типу относится перечисляемый тип. Перечисляемый тип определяет множество значений, упорядоченное с помощью перенумерации идентификаторов, соответствующих этим значениям. С каждым идентификатором связано целое число, соответствующее его порядковому номеру в определении типа. Например, дни недели MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY.

Кроме того, существует четыре скалярных типа, которые определяются компилятором как стандартные:

BOOLEAN (булевский, логический) – может принимать значения TRUE или FALSE, причем считается, что FALSE < TRUE.

INTEGER (целочисленный) – может принимать значения целых чисел в интервале от - 215 до 215-1.

REAL (действительный, вещественный) – может принимать значения действительных чисел, представленных в формате с плавающей точкой.

CHAR (символьный) – может принимать значения символов, каждый из которых представляется в коде ASCII. Упорядоченность символов и числовое значение, связанное с каждым символом, определяются внутренним представлением их в машине.

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

[- 10 .. 2000]; [MONDAY .. FRIDAY]; [’A’ .. ’F’] .

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

По способу организации структур различают: массив (ARRAY), запись (RECORD), множество (SET), файл (FILE).

Массив (Array) – конструкция, состоящая из некоторого фиксированного числа компонентов, имеющих одинаковый тип. Каждый компонент в массиве определяется своим индексом. Тип индекса должен быть простым, содержащим конечное число элементов. Действительным тип индекса быть не может. Компоненты массива при записи ограничиваются [ и ]. Например,

array [ 1..80 ] of char; array[ 1 .. 5, 1 .. 3 ] of real;

Компонентная переменная как элемент массива называется индексированной переменной. Например, a[3], a[2,4].

Если индекс задается выражением, то тип выражения должен совпадать с индексным типом: b[i+1, j+1].

Запись (Record) – это структура данных, состоящая из фиксированного числа компонентов, называемых полями. При этом поля могут быть различных типов. В записи каждое поле имеет собственное имя (идентификатор).

Общий вид:

type r = record v1 : t1;

v2 : t2;

………

vk : tk

end;

где vi – идентификатор (или список идентификаторов) поля (полей);

ti – тип поля (полей), называется базовым по отношению к типу r;

r – имя типа.

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

Например, пусть переменные x и y описаны в программе как переменные типа r:

var x,y : r;

Тогда для переменных одного и того же типа можно использовать оператор присваивания x:=y;

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

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

type complex = record

re, im :real;

end;

var z : complex;

Здесь complex – имя типа, а z – имя переменной.

Переменная z состоит из двух полей re (от Real) и im (от Imaginary), имеющих один и тот же базовый тип (real). Обращение к этим полям осуществляется с помощью составных имен z.re и z.im соответственно.

z.re: = 5. 2; z.im: = 3.1;

Пример.

type date = record

d: 1.. 31;

m: 1 .. 12;

y: integer;

end;

var dt: date;

Для того, чтобы заслать в dt дату 25.04.2016, надо выполнить следующие операторы:

dt. d: = 25;

dt.m: = 4;

dt.y: = 2016;

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

Разрешается использовать тип записи (record) при описании других структурированных типов данных (например, можно построить массив записей).

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

Общий вид

with v do s;

Здесь v – имя переменной (или список имен переменных) типа record;

s – оператор (один).

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

with dt do

begin

d: = 25;

m: = 4;

y: = 2016

end;

Множественные типы данных (множества – Set) представляют собой ограниченный набор различных элементов базового типа – скалярный или ограниченный тип (рис. 3).

Рис. 3. Синтаксическая диаграмма множественного типа

Простой тип можно представить любым скалярным, кроме типа real.

Примеры записи:

type stud = 1.. 25;

grup = set of stud;

var stud 3, stud 4, stud5: grup;

Элементы простого типа, все подмножества множественного типа и пустое подмножество составляют множество. Пустое подмножество не содержит ни одного элемента. Множества строятся из элементов с помощью конструктора множества, который представляет собой перечисление через запятую элементов, заключенных в квадратные скобки. Пустое множество представляется как [ ].

Конструкция М.. N обозначает множество всех элементов I базового типа, для которых выполняется условие М <= I <= N. При М > N множество [М .. N] является пустым.

Например, если переменная определена как Set of 1..3, то она может принимать одно значение из множества [1, 2, 3], [1,2], [1,3], [2,3], [1], [2], [3], [ ]. Каждое из этих значений является элементом базового типа множества.

Если множество состоит полностью или частично из диапазона упорядоченных значений, то можно использовать сокращенный вид записи. Например, [1,2,3,4,5,6] то же, что и [1..6].

Переменные, принадлежащие к множественному типу, могут быть описаны непосредственно в разделе var без предварительного описания имени типа в разделе type:

type stud = 1..25;

var grup: set of stud;

stud 3, stud 4, stud 5: grup;

Ко всем объектам множественного типа применимы операции объединения ( + ), пересечения ( * ) и вычитания ( - ).

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

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

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

Пример. Если определены два множества

var p1 : set of ‘A’..’F’;

p2 : set of 0..9;

то [ ‘B’ , ‘F’] + [ ‘B’.. ‘D’] = [ ‘B’, ‘C’, ‘D’, ‘F’ ];

[1,2] + [1,3] = [1,2,3];

[ 0..4 ] * [ 3..7 ] = [ 3,4]; [1,2] * [1,2,3] =[ 1,2]; [ 0..4 ] * [ 5,6 ] = [ ];

[ 1,5,9 ] – [ 2,4,8,9 ] = [ 1,5 ]; [1,2,3] – [1,2] = [3].

Операции отношения применимы также к объектам множественного типа: проверка на равенство ( = ) , неравенство ( < > ), включение ( < = или > =) и принадлежность множеству ( in ) .

Пример. [2,3 ] = [0] результат false;

[1,3 ] = [ 3,1] результат true;

[1,2] < = [1,2,3] результат true ( содержится в );

[2,3] > = [1] результат false ( не содержится в ).

При использовании операции in первый операнд является выражением, задающим значение базового типа множества, а второй – множество. Если значение является элементом множества, то результат отношения есть true.

Например, определение типа

type

days = (mon, tue, wed, thu, sat, sun ) ;

months = ( yan, feb, mar, apr, may, jun, jul, aug,sep,oct, nov, dec);

а отношение feb in days примет значение false.

Проверка на принадлежность множеству используется в программах для исключения сложных условий. Так, выражение с использованием логических операций вида ( ch > = ‘0’) and ( ch <=’9’) с использованием операции in имеет вид CH in [ ‘0’ ..’9’].

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

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

Файл (File) – именованная область внешней памяти персонального компьютера (ПК), предназначенная для хранения программы или данных.

Понятие файла распространяется также на логические устройства (логические имена, которые связаны со стандартными аппаратными средствами ПК, например, CON – клавиатура, экран дисплея, PRN – печатающее устройство и т. д.), рассматриваемые как потенциальные источники или приемники текстовой информации.

Любой файл имеет следующие характерные особенности:

  1. У него есть имя, что дает возможность программе работать сразу с несколькими файлами одновременно.

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

  3. Длина вновь создаваемого файла никак не оговаривается при его объявлении и ограничивается только ёмкостью устройства внешней памяти.

Существует три вида файлов:

  1. типизированные (file of …);

  2. текстовые (text);

  3. нетипизированные (file),

типы которых и связанные с ними файловые переменные описываются соответствующим образом:

type

t1= file of < тип >;

t2 = text;

t3 = file;

Var f1, f2: t1;

f3, f4, f5: t2;

f6: t3;

где t1,t2,t3 – имена типов файлов (t1 – типизированный, t2 – текстовый, t3 – нетипизированный),

f1,f2, f3, f4, f5, f6 – имена файловых переменных,

< тип > – любой тип ТП, кроме файлов.

Вышеприведенное описание может быть представлено в следующей эквивалентной форме:

var f1, f2 : file of < тип >;

f3, f4, f5: text ;

f6: file;

Имя файла состоит из двух слов: имени и расширения, разделяемых точкой.

Пример: gg. pas gg. exe d1. dat.

Текстовый файл в ТР – это совокупность строк переменной длины. Доступ к каждой строке возможен лишь последовательно, начиная с первой.

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

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

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

1. Можно ли выполнять операцию деления ( / ) над переменными целого типа?

2. Какого типа будет результат деления 19 на 4?

3. Есть ли разница (с точки зрения языка Паскаль) между числами 157 и 157.0, между 30 и 3Е1?

4. Верно ли, что в программе на Паскаль надо описывать все используемые в ней переменные?

5. Какую информацию извлекает транслятор из описания переменных и как он ее использует?

6. Какие значения имеют переменные в начале выполнения программы?

7. Можно ли менять значения констант?

8. Как определяются типы констант?

9. Почему не надо описывать константы maxint, true, false, pi?

10. Записать следующие числа без десятичного порядка:

а) -0.00037Е+4 б)333Е-3 в)1Е3

11. Сколько операций выполняется при вычислении выражения

(x + 1/5) * (y + 7/10) - 3/4?

Как сократить число операций?

12. Какие из приведенных записей являются неправильными и почему?

а) 5. б) – 6.1 в) 0.0 г) 9 д) .0Е -2

е) 0.15Е – 5 ж) – 5.3Е4 з) - 2.4Е+4 и) – 71 к) 0.21

л) .456 м) 2,1 н) 0005 о) – 0 п)7,0

р) +0.3 с) .3 т) 2/3 у) Е-1 ф) 8Е0

13. Записать на Паскале следующие числа:

а) 5! б) LXIV в) 6,38 г) – 0,7(4) д) 11/4 е) -1/6

ж) з) π и) 5·106 к) -24.8·10-7 л) 1/1000 м)

14. Вычислить

24/(3*4) – 24/3/4 + 24/3*4

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