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

Основы программирования на языке Паскаль. Основные понятия алгоритмического языка Паскаль. Учебное пособие для самостоятельной работы по дисциплине «И

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

 

 

Таблица 1

Типы представления целых чисел в языке Паскаль

 

 

 

 

Тип

Диапазон

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

 

BYTE

0..255

1

 

(целое длиной в байт)

 

 

 

SHORTINT

-128..127

1

 

(короткое целое)

 

 

 

INTEGER (целое)

-32768..32767

2

 

WORD

 

 

 

(длиной в слово)

0..65535

2

 

LONGINT

 

 

 

(длинное целое)

-2147483648..2147483647

4

 

 

 

 

 

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

Данные вещественного (действительного) типа представлены в памяти ЭВМ приближенными значениями, поэтому и результат операции с этими числами является приближенным.

Вещественные числа изображаются в естественной или нормальной (экспоненциальной, показательной) форме. Запись вещественных чисел представляет собой строку цифр, в которой присутствует десятичная точка, отделяющая целую часть от дробной, и /или буква Е, обозначающая основание 10; после Е указывается порядок, то есть показатель степени, в которую нужно возвести основание 10. Таким образом, общий вид записи вещественных чисел

± m.n E±p,

где m – целая часть числа, n – дробная часть числа, Е – основание, равное 10,

p– показатель степени.

ВТурбо Паскале имеется пять стандартных вещественных типов (табл.2).

 

 

Таблица 2

Стандартные вещественные типы в языке Паскаль

 

 

 

 

Тип

Диапазон

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

 

REAL

2.9·10-39 .. 1.7·1038

6

 

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

 

 

 

SINGLE

1.5·10-45 .. 3.4·1038

4

 

(с одинарной точностью)

 

 

 

DOUBLE

5.0·10-324 .. 1.7·10308

8

 

(двойной точностью)

 

 

 

EXTENDED

1.9·10-4951 .. 1.1·104932

10

 

(повышенной точностью)

 

 

 

COMP

-2·1063+1 .. 2·1063-1

8

 

(сложный)

 

 

 

 

11

 

 

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

Стандартный логический тип BOOLEAN (размер 1 байт) представляет собой тип данных, любой элемент которого может принимать одно из двух возможных значений: TRUE (истина) или FALSE (ложь). При этом принято,

что FALSE< TRUE.

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

Стандартный символьный тип CHAR (размер 1 байт) представляет собой символ (литеру) из набора символов данного компьютера. Каждой литере сопоставляется некоторый числовой эквивалент, служащий ее внутримашинным представлением и называемым кодом ASCII (американский стандартный код для обмена информацией). Полный перечень кодов ASCII приведен в приложении 3. Каждое значение CHAR имеет свой порядковый номер (код). Например, символ А имеет код 65, символ В имеет код 66, символ z имеет код 122. Величины символьного типа сравниваются по своим кодам, например, А<В, так как

65<66.

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

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

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

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

Пример: TYPE

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

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

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

type day = (mo, tu, we, th, fr, sa, su);

12

var d1,d2,d3 : day;

означает, что переменные d1, d2, d3 типа day при выполнении программы могут принимать только одно из семи указанных значений. Объект, указанный в списке, может присутствовать не более, чем в одном описании. Например, описание

type t1= (one, two, three, four);

type t2 = (four, five, six);

неправильно, эти два задания типов несовместимы, так как four встречается в обоих типах.

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

type name = (John, Tom, Nick, Ann, Jane );

type color = (red, blue, black);

var x, y, z : name; c1, c2, c3 :color;

можно записать следующие операторы присваивания:

c1:= blue; x:= Ann; y:= Tom; c2:= red;

Нельзя присвоить переменной значение из описания другого типа, например, недопустимы присваивания

z:= black; c3:= Tom;

Для перечисляемого типа данных существенен порядок указанных объектов. К данным перечисляемого типа применимы операции отношения. Например, из предыдущего описания и примеров операторов присваивания следует, что выражения

x>John , c2<c1,

y<x имеют значение true.

Для объектов перечисляемых типов определены системные стандартные функции odd, pred и succ (таблица 8, стр.37), имеющие тот же смысл, что и для стандартных скалярных типов. Например, для типа color результатом функции succ (red) является значение blue, результатом функции pred (black) – blue.

Функция ord (blue) (таблица 7, стр.37) выработает значение, равное единице, так как нумерация объектов в списке начинается с нуля.

13

Ограниченный тип

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

Пример: TYPE

Dozen = 1..12; {числа от 1 до 12} Name = ′A′ .. ′ F ′; {буквы от A до F}

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

Type day = (mo, tu, we, th, fr, sa, su);

nom = 10 .. 25;

sss = ‘c’ .. ‘x’;

wd = sa .. su;

для ограниченного типа nom базовым является целый тип, для sss – символьный, для wd – определенный ранее перечисляемый тип day. Сначала указывается нижняя граница, потом верхняя (при этом нижняя граница не должна быть больше верхней). Попытка присвоить переменной ограниченного типа значение, не входящее в заданный диапазон, будет диагностирована как ошибка.

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

СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ

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

По способу организации структур различают: массив (ARRAY), запись

(RECORD), множество (SET), файл (FILE).

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

14

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

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;

15

Тогда для переменных одного и того же типа можно использовать оператор присваивания 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.2017, надо выполнить следующие операторы

dt. d: = 25;

dt.m: = 4;

dt.y: = 2017;

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

16

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

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

Общий вид

with v do s;

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

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

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

with dt do

begin

d: = 25;

m: = 4;

y: = 2017

end;

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

Множественный

Простой

Set

Of

тип

тип

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

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

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

 

type

stud = 1.. 25;

grup = set of stud;

17

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;

18

то [ ’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) – именованная область памяти персонального компьютера (ПК), предназначенная для хранения программы или данных.

Понятие файла распространяется также на логические устройства (логи-

19

ческие имена, которые связаны со стандартными аппаратными средствами ПК, например, 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;

20

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