Тема 4. Создание новых типов данных. Структурированные типы
Тип переменных – массив.
Тип переменных – множество.
Тип переменных – файл.
Создание новых типов данных.
Объявление новых типов данных:
С
интаксическая
диаграмма:
Примеры:
program MyProgram1; uses Crt ; {объявление о необходимости подключения модуля Crt } type int = 0..10; Sim = ‘a’, ‘e’, ‘и’, ‘о’, ‘у’; var N, M : int; {объявления двух переменных типа int} D, r: Sim; ; {объявления двух переменных типа Sim} |
Структурированные типы
Структура – многоэлементное образование объединенное общим именем – форма представления совокупности данных. К структурам в языках программирования относят массивы, строки, множества, файлы, записи, и объекты. Тип таких данных сложно задавать путем перечисления упорядоченных или ассоциативных набор всевозможных значений, поэтому в системе программирования для этих целей используют специальные конструкторы типов.
Тип переменных – массив.
Массив - упорядоченное конечное множество значений принадлежащих одному типу. Так как массивы имеют размерности, а их значения относится к конкретному типу, для объявления типа массив используется специальный конструктор. Конструктор имеет вид:
Пример объявления:
Var a,b : array [1..8] of integer ;
c,d : array [1..3, 1..3] of real ;
g,h : array [1..9, 1..80, 1..25] of char ;
type vector = array [1..8] of integer ;
mass = array [1..3, 1..3] of real ;
book = array [1..9, 1..80, 1..25] of char ;
var a,b : vector ;
c,d : mass ;
g,h : book ;
type int = 1..3 ;
mass = array [int, int] of real ;
var c,d : array [int, int] of real ;
Задачи для классной и домашней работы (не менее 4-6 в классе и 5-10 дома). 7.1 – 8.162.
Задачи из раздела 10 (сортировка элементов массива).
Тип переменных – множество.
Множество - это структура, объединяющая фиксированное число значений удовлетворяющих определенным признакам и принадлежащих одному типу.
В отличие от массива порядок расположения элементов множества не имеет значения. Например, у множества [ ‘+’, ‘–’, ‘*’, ‘/’ ] тип компонентов сhar (символьный), признак объединения - знаки арифметических операций и неважно в каком порядке они перечислены.
Конструктор типа представлен следующей синтаксической диаграммой:
Примеры использования конструктора:
type
MatOperation1 = set of (‘+’ , ‘–’ , ‘*’ , ‘/’) ; { множество знаков арифм. операций}
MatOperation2 = (‘+’ , ‘–’ , ‘*’ , ‘/’) ; { перечисляемый тип }
VowelLetter = set of (‘a’, ‘o’, ‘u’, ‘e’, ‘i’) ; { множество гласных букв }
var
m1, m2 : MatOperation ;
c1,ga5 : VowelLetter ;
S3, h4 : set of (3, 5, 7, 11, 13,17) ; { переменные типа «множество простых чисел»}
D6 : set of 1..31 ; { переменные типа «множество целых чисел»}
Множество, в котором присутствуют все элементы, называют базовым.
Задать или изменить значение переменной типа множество можно путем использования инструкции присваивания. Например:
m1 := [‘+’ , ‘–’] ; m2 := [‘*’] ;
c1 := [‘i’, ‘e’] ; ga5 := [‘u’, c1] ; c1:= [ ] ; {[ ] – пустое множество.}
В таблице приведены операции и процедуры применимые к объектам, принадлежащим к типу множество.
Операции |
Знак операции |
Результат |
1 |
2 |
3 |
Пересечение |
* |
Общие элементы |
Объединение |
+ |
Первое множество дополнено недостающими элементами второго |
Разность |
- |
Элементы первого множества не принадлежащие второму |
Эквивалентность |
= |
True – если множества эквивалентны |
Неэквивалентность |
<> |
True – если множества неэквивалентны |
Вхождение |
<= |
True – если первое множество включено во второе |
Вхождение |
>= |
True – если второе множество включено в первое |
Принадлежность |
IN |
True – если выражение значением которого является элемент - принадлежит множеству |
Процедура включения элемента во множество |
Include(M,v) |
M – множество, v - элемент |
Процедура исключения элемента из множества |
Exclude(M,v) |
M – множество, v - элемент |
Например: m1 := [‘+’ , ‘–’] ; Include(m1, ‘/’); m2 := [‘*’] ; m1 := m1 + m2 ; m1 := m1 * m2 ; c1 := [‘a’, ‘o’, ‘u’, ‘e’, ‘i’] ; ga5 := c1- [‘u’, ‘o’] ;
|
||
Задачи для классной и домашней работы (не менее 3 в классе и 3-6 дома). 12.5 – 12.34.
Тип переменных – файл.
Файлы – емкости для хранения информации. Под файлом понимают именованную область памяти компьютера, или именованное устройство потенциальный источник или приемник информации.
В зависимости от внутреннего содержания файлы подразделяют на три типа:
Текстовые – компоненты коды символов;
Типизированные - компоненты объявленного типа;
Нетипизированные - тип компонентов не определен;
Конструктор типа представлен следующей синтаксической диаграммой:
Примеры использования конструктора:
var f, Myfile : Text ; {Две переменные типа текстовый файл.}
f1, f2 : File of Integer ; {Две переменные типа файл целых чисел}
s3, h4 : File of Point ; {Две переменные типа файл записей }
d6 : File ; {Переменная типа файл}
Существует инструкция присваивания значения переменной типа файл. Эта инструкция носит название «запись в файл». Она имеет вид:
Например:
write( f, x, y, z ); write( Myfile, 3.1415926, sin(y)+2 );
Существует инструкция чтения значения из файла, эта инструкция носит название «чтение из файла». Она имеет вид:
Например:
read( f, x, y, z ); read( Myfile, a, b );
Память компьютера можно разделить на два вида: оперативного использования и длительного хранения. Данные в памяти оперативного использования «живут» только в интервале времени выполнения программы. Данные в памяти длительного хранения доступны всегда. Файлы объявленные в программе занимают память оперативного использования. Для создания их копий в памяти длительного хранения используют процедуру связывания файлов Assign. Эта процедура и ряд других подпрограмм оперирующих с файлами описан в таблице:
Подпрограммы для работы с файлами |
|
Обращение |
Описание |
Assign(var F: Файл; FileName: String); |
Связывает переменную F с именем файла на конкретном носителе информации |
ReSet (var F [: FileType ; Recsize: Word ] ) |
Открывает файл для чтения. Указатель устанавливается на начало файла. |
Read ([ var F: Text;] V1 [, V2, ..., Vn ]) |
Читает из файла значения для переменных Vi. |
IOResult: Integer |
Возвращает признак операции ввода вывода. |
Rewrite (var F: FileType [; Recsize: Word ] ) |
Открывает файл для записи. Если в файле хранилась информация, она уничтожается |
Write ([ var F: Text; ] P1 [,P2,...,Pn ] ) |
Записывает в файл значения переменных Pi. |
Close (var F:FileType) |
Закрывает файл. Обеспечивает сохранение записей и регистрацию файла в каталоге. |
Append (var F:Text) |
Открывает существующий текстовый файл и разрешает добавлять запись в его конец. |
FileSize(var F): Longint |
Возвращает размер файла в байтах |
FSplit(Path: PathStr; var Dir: DirStr; var Name: NameStr; var Ext: ExtStr) |
Разбивает полное имя файла на 3 его составляющие: - путь, имя, расширение |
ReName(var F:Text; Newname) |
Переименовывает файл. |
Erase (var F:FileType) |
Удаляет закрытый файл с диска. |
EoLn [(var F:Text)] : Boolean |
Возвращает признак достижения конца строки в текстовом файле |
EoF [(var F:Text)] : Boolean |
Возвращает признак достижения конца файла |
Flush (var F:Text) |
Очищает внутренний буфер файла открытого для чтения |
Для примера приведены две программы:
-
Помещаем в текстовый файл значения двух переменных.
Var f : text;
x, y : Real;
begin x:=3.25; y:= Sin(X);
Assign ( f, ‘D:\MyFile.TXT’ ); {Связываем переменную F с файлом на диске D: }
ReWrite (f); {Открываем файл F на запись}
Write (f, X:8:5, Y:10:6); {Помещаем значения двух переменных в файл }
Close (f); {Закрываем созданный файл}
end.
Читаем из текстового файла значения двух переменных и выводим их на экран.
Var f1 : text; x, y : Real;
begin
Assign ( f1, ‘D:\MyFile.TXT’ );
Reset (f1); {Открываем файл f1 на чтение}
Read (f1, x, y); {Читаем из файла две записи}
Write ( x:8:5, y:10:6); {Выводим на экран дисплея}
Close (f 1);
end.
Задачи для классной и домашней работы (не менее 3 в классе и 3-6 дома). 13.1 – 13.38.
Итог. Контрольная работа по всем разделам темы 4.
