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

Информатика / Тема 7

.pdf
Скачиваний:
19
Добавлен:
12.04.2015
Размер:
147.04 Кб
Скачать

Тема 7. Нестандартные типы данных в языке Паскаль

3.3. Комбинированный тип (тип-запись)

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

Признаки структурированного типа данных запись:

1.Число компонент всегда заранее известно

2.Тип компонент может быть различным

3.Выделения нужной компоненты осуществляется при помощи поля

type <имя записи> = record;

<имя поля 1>: < тип поля записи 1>;

<имя поля 2>: < тип поля записи 2>;

.......

<имя поля N>: < тип поля записи N>; end.

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

x=12 часов 35 минут 48 секунд;

x.h:=12;

x.m:=35;

x.sec:=48;

Пример: type time= record; h: 0..29;

m: 0..59; sec: 0..59; end;

var x: time;

with<имя записи> do

Например: with x do begin

h: =12; m:=35;

sec:=48;

end; 11

Тема 7. Нестандартные типы данных в языке Паскаль

3.4. Множественный тип (тип-множество)

Множество это тип данных, образуемый над некоторым базовым типом так, что

переменная множественного типа имеет в качестве своего значения множество всевозможных сочетаний объектов исходного множества. Число элементов исходного множества в Turbo-Pascal не может быть больше 256, а порядковые номера элементов (значения функции Ord) должны находится в пределах от 0 до 255.

Признаки структурированного типа данных множество:

1.Число компонент всегда заранее известно

2.Тип компонент должен быть одинаков

3.Выделения нужной компоненты осуществляется прямым указанием

type <имя типа>= set of <имя базового типа>

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

произвольного числа элементов

[ 2,4,8]- трехкомпонентное множество.

[‘a’, ‘b’]-двухкомпонентное множество, построенное на множестве литерного типа. [1...6,9,11,30]-относятся к разным базовым типам.

[Plus, Minus]

[1..K mod 12, 15] 12 [Chr(0) .. Chr(31),'A','B']

Тема 7. Нестандартные типы данных в языке Паскаль

Операции над множествами условно делятся на 2 категории: 1 – операции над множествами результатом которых является множество; 2 – операции над множествами результатом которых является константы логического типа.

1 категория

 

 

Объединение множеств:

 

 

+

[1, 2, 3]+[3, 5, 8]

=

[1, 2, 3, 5, 8]

Пресечение множеств:

 

 

*

[1, 2, 3]*[3, 5, 8]

=

[3]

Разность множеств:

 

 

-

[1, 2, 3]-[3, 5, 8]

=

[1, 2]

2 категория

Проверка эквивалентности множеств:

=

[1, 2, 3]=[3, 2, 1]

= true

Проверка не эквивалентности множеств:

<>

[1, 2, 3]<>[3, 1, 2]

= false

Включение левого множества в правое:

<=

[1, 2]<=[3, 2, 1]

= true

Включение правого множества в левое:

>=

[1, 2,3]>=[2, 1]

= true

5. Проверка принадлежности элемента слева множеству справа in 1 in [4,2,5,22,8,1,11] = true

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

проверки и ветвления, зависящие от них.

13

Тема 7. Нестандартные типы данных в языке Паскаль

Пример Задан символьный файл. Необходимо подсчитать количество пробелов, букв и цифр по отдельности в данном файле.

Program PRIMER (FC,output);

Uses crt;

var fc: file of char; c: char; KP, KC, KB: integer;

begin clrscr;

reset(FC); KP:=0; KC:=0; KB:=0; while not eof(FC) do begin read(FC,c);

if c=’ ’ then KP:=KP+1 else

if c in [’0’..’9’] then KC:=KC+1 else

if c in [’a’..’z’, ’A’..’Z’, ’a’..’я’, ’А’..’Я’] then KВ:=KВ+1 end;

{вывод результата} repeat until keypressed end.

14

Тема 7. Нестандартные типы данных в языке Паскаль

3.5. Файловый тип (тип-файл)

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

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

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

Структура физического файла

Структура логического файла

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

байт

байт

байт

байт

байт

байт

 

байт

байт

байт

байт

байт

Eof

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Структура логического файла это способ восприятия физического файла в программе. Образно говоря, это «шаблон», при помощи которого мы

рассматриваем физическую структуру файла

15

Тема 7. Нестандартные типы данных в языке Паскаль

В языке Turbo-Pascal файлы классифицируются по двум признакам:

-по типу (логической структуре)

а) типизированные (тип компонент известен и объявляется при описании типа): б) нетипизированные (тип компонент при описании файла не указывается);

в) текстовые (являются разновидностью типизированных файлов с дополнительным условием, что компоненты файла относятся символьному типу);

- по методу доступа к элементам файла

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

сеансе работы с этим файлом);

Замечание: Типизированные и нетипизированные файлы по методу доступа могут являться как файлами последовательного доступа, так и файлами прямого доступа. Текстовые файлы могут быть только последовательного доступа.

16

Тема 7. Нестандартные типы данных в языке Паскаль

Файл описывается в разделе переменных или в разделе описания типов.

Для типизированных файлов:

type <имя файлового типа>=file of <тип компонент>;

var <имя файловой переменной>:<имя файлового типа>;

или

var <имя файловой переменной>:file of <тип компонент>;

Для нетипизированных файлов:

var <имя файловой переменной>:file;

Для текстовых файлов:

var <имя файловой переменной>:text;

17

Тема 7. Нестандартные типы данных в языке Паскаль

С каждым файлом связан особый объект буфер файла (его можно

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

<имя файловой переменной>

В реализациях языка вместо символа - используется символ - ^

байт байт байт байт байт Eof

буфер файла

Над файлом в целом не определено никаких операций (нет даже операции присваивания). Над буферной переменной определены все действия, которые определены для базового типа компонентов.

В стандарте языка файлы делятся на внешние и внутренние.

Признаком, отличающим тип файла, является указание имени файла в заголовке программы. Если имя файла указано в заголовке программе этот файл является внешним, если не указано внутренним.

Например:

Program PRIMER (input, output,f1);

Var f1,f2: file of integer;

18

Тема 7. Нестандартные типы данных в языке Паскаль

С каждым файлом связан признак конца файла. Признак конца файла определяется с помощью процедуры EOF (f), эта функция принимает значение true, если при перемещению по файлу был достигнут его конец, если конец не был достигнут, то функция принимает значение false.

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

физического и логического файла выполняется процедурой

Assign(<имя файловой переменной>,’<имя физического файла>’);

Замечания:

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

2.Вторым параметром данной процедуры является строковая константа или имя строковой переменной, определяющая имя физического файла, указанное согласно правилам записи имени файла в MS-DOS.

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

Например:

Assign(f,’MyFile.dat’);

Или

Name:=’A:\MyFiles\Myfile.dat’; Assign(f,Name);

По завершении работы с внешним файлом его необходимо закрыть. Закрытие файла

осуществляется процедурой

Close(<имя файловой переменной>);

19

Тема 7. Нестандартные типы данных в языке Паскаль

Процедура чтения из файла

Reset(<имя файла>)

По этой процедуре выполняются следующие действия:

Поиск указанного файла на внешнем устройстве;

Установка связи с этим файлом;

Буфер файла устанавливается в первую позицию

Здесь возможны две ситуации а) файл не пустой, т.е. содержит какие то данные. В этом случае буфер файла принимает

значение первой компоненты файла, а признак конца файла получает значение false. б) файл оказался пустым, в нем не содержится никакой информации. В этом случае буферная переменная является не определенной, а признак конца файла имеет

значение true.

Для выборки информации из файла используется процедура

Get(<имя файла>)

Примечание: Перемещение по файлу осуществляется только слева направо, т.е. только в прямом направлении. НАЗАД ПО ФАЙЛУ ПЕРЕМЕЩАТЬСЯ НЕЛЬЗЯ.

<имя переменной>:=<имя файла>; get(<имя файла>)

 

Например:

 

х :=<f1>; get(<f1>)

20

read(<имя файла>,<имя переменной>)

 

Соседние файлы в папке Информатика