program MyArray;
var a:array [1..10] of real;
f:text;
i:integer;
begin
assign File(f,'dat. txt');
randomize;
rewrite(f);
for i:=1 to 10 do
begin
a[i]:=random;
writeln(f, a[i]:8:4);
end;
close File(f);
writeln;
writeln('Press <Enter> to read file')
readln;
reset(f);
for i:=1 to 10 do
begin
readln(f, a[i]);
writeln(a[i]:8:4)
end;
close File(f);
readln
end.
Объяснение операций работы с файлами будет дано позже.
2.10.3. Перечисления
type имя типа = (идентификатор1, идентификатор2,…, идентификаторN);
Примеры:
month = (Jan, Feb, March, Apr, May, June, Jul, Aug, Sept, Oct, Nov, Dec);
type t1 = (x1,x2,x3);
var ab:t1;
m:month;
begin
case m of
Dec, Jan, Feb: operator1;
March..May: operator2
else operator2;
a:=x2;{ord(a)gacm1}
b:=x3;{ord(b)gacm2}
……
a:=t1(0);{явное приведение типа – обратно к функции ord}
В других языках:
C++:
enum Month carrentMonth;
if (carrentmonth!=Jan){…}
Но:
Jan==0,Feb==1,…;
Можно даже
Enum Month{Jan=1,Feb,…,Dec=14};
2.10.4. Множества
Множества — это структурированный тип данных, представляющий набор взаимосвязанных по какому-либо признаку или группе признаков объектов, которые можно рассматривать как единое целое. Каждый объект в множестве называется элементом множества. Все элементы множества должны принадлежать одному из скалярных типов, кроме вещественного. Этот тип называется базовым типом множества. Базовый тип задается диапазоном или перечислением. Область значений типа множество — набор всевозможных подмножеств, составленных из элементов базового типа.
Для описания множественного типа используется словосочетание set of, что в переводе означает "множество из", после чего следует перечисление в круглых скобках элементов множества через запятую.
Формат задания типа “множество”:
type
Имя_типа1=set of (порядковый_тип);
Имя_типа2=set of значение1..значение2;
Пример:
type
My=set of char;
MyInterval=set of 1..10;
MyEnumeration=set of (Jan, Feb,…);
var
aSet1: MyChars;
aSet2: MyInterval;
const
aLetter:set of myChars=[‘I’,’k’,’l’,’z’];{Определение
множества без предварительного описания в разделе типов}
begin
aSet1:=[‘a’,’b’,’z’];
……
aSet1:=[ ];
end
В данном примере переменная aSet1 и статическая переменная aLetter могут принимать любые значения, aSet2 — любое значение в диапазоне 1..10; . Попытка присвоить другие значения вызовет ошибку времени исполнения.
В выражениях на языке Паскаль (т. е. в разделах реализации процедур, функций или в теле программы) значения множеств указываются в квадратных скобках: [1,2,3,4], ['a','b','c'], ['a'..'z']. Если множество не имеет элементов, оно называется пустым и обозначается как [].
Внимание! Количество элементов множества не должно превышать 256, соответственно номера значений базового типа, получаемые функцией ord(MyElement) для элемента MyElement нашего множества, должны находиться в диапазоне 0..255.
Объем памяти, занимаемый одним элементом множества, составляет один байт. Объем памяти для переменной типа множество вычисляется по формуле:
Объем памяти = (Max div 8) -(Min div 8) + 1,
где Max и Min — верхняя и нижняя границы базового типа.
При работе с множествами допускается использование операций отношения "=", "<>", ">=", "<=", объединения ”+”, пересечения “*”, разности “-“ множеств и операции in. Результатом выражений с применением этих операций является значение True или False.
Операция "равно" (=).
A=B
Два множества A и B считаются равными, если они состоят из одних и тех же элементов. Порядок следования элементов в сравниваемых множествах значения не имеет.
Операция "не равно" (<>).
A< >B
Два множества A и B считаются не равными, если они отличаются по мощности или по значению хотя бы одного элемента.
Операция "больше или равно" (>=).
A>=B
Используется для определения принадлежности множеств. Результат операции A>=B равен True, если все элементы множества B содержатся в множестве A. В противном случае результат равен False.
Операция "меньше или равно" (<=).
A<=B
Используется аналогично предыдущей операции, но результат операции A<=B равен True, если все элементы множества A содержатся в множестве B. В противном случае результат равен False.
Операция in.
X in A
Используется для проверки принадлежности какого-либо значения выражения x указанному множеству A. Обычно применяется в условных операторах. Не путать с оператором <=, который используется для сравнения двух множеств.
При использовании операции in проверяемое на принадлежность значение и множество в квадратных скобках не обязательно описывать в разделе описаний.
Операция in позволяет эффективно и наглядно производить сложные проверки условий, заменяя иногда десятки других операций. Например, выражение
if (a=1) or (a=2) or (a=3) or (a=4) or (a=5) or (a=6) then... можно заменить более коротким выражением if a in [1,2,3,4,5,6] then... . Иногда операцию in пытаются записать с отрицанием: X not in M. Такая форма ошибочна, так как две операции следуют подряд; правильная инструкция имеет вид not (X in M).
Объединение множеств (+).
Объединениям двух множеств является третье множество, содержащее элементы обоих множеств.
Пересечением множеств (*).
Пересечением двух множеств является третье множество, которое содержит элементы, входящие одновременно в оба множества.
Разностью множеств (-).
Разностью двух множеств является третье множество, которое содержит элементы первого множества, не входящие во второе множество.
Использование в программе данных типа множества дает ряд преимуществ: значительно упрощаются сложные операторы if, увеличивается степень наглядности программ и понимания алгоритма решения, экономится память, время компиляции и выполнения. Имеется и отрицательный момент: элементов множества не может быть больше 256. Поэтому если при описании систем, где число элементов на начальном этапе работы мало, сопоставить элементы множества, в дальнейшем можно столкнуться с трудностями, если число элементов возрастет выше 256.
2.10.5. Файловые типы. Операторы write, writeln, assignFile, read, readln, reset, rewrite, closeFile.
Файл – это именованная область хранения информации с возможностью произвольного доступа к ней. Доступ бывает либо последовательный, либо произвольный.
Файлы являются структурными типами с особыми правилами работы с ними. В данном параграфе описываются операторы для работы с файлами.
Задание переменной файлового типа производится так:
type tF=file of t1
var f:tF;
либо var f:file of t1;
тут t1 – базовый тип файлового типа, то есть тип ячеек, из которых состоит файл.
Для работы с файлами надо сначала определить файловую переменную (например, F1), имеющую тип, соответствующий типу файла, с которым будет осуществляться работа. Для этого используется процедура: assign(F1, Name: string), где строковое выражение Name содержит полное имя файла, удовлетворяющее требованию операционной системы. Пример:
var F1: file of integer;
…
assign File(F1,'data1.x');
Файловая переменная (в нашем случае F1) выполняет роль указателя на файл, а оператор assign “перещелкивает” его с одного файла на другой. Причем до первого assign значение этого указателя неопределено.
В процессе работы файловой переменной можно переприсваивать имена файлов.
Имя файла может включать в себя имя в текущей директории, а также (необязательно) полный путь на локальном компьютере или относительный путь.
Для работы с текстовыми файлами существует предопределенный тип файлов Text:
var F: text;
…
assign File(F,'data. txt');
Существуют также нетипизированные файлы. Соответствующие файловые переменные описываются как var F:file.
Операторы write и writeln — полиморфные операторы с произвольным числом и типом параметров. Первым параметром является файловая переменная, далее через запятую следуют выводимые в файл переменные или выражения.
Неформатный вывод в файл:
· write(F1,a); write(F1,b, c,...,d) — вывод в файл “подряд” всех значений. Эквивалентно write(F1,a, b,c,…,d).
· writeln(F1,a); writeln(F1,b, c,...,d) — имеет смысл только для текстовых файлов. После вывода всех перечисленных в операторе параметров в конец добавляется перевод на новую строку. В данном примере — после вывода a и после вывода d.
Другой пример:
writeln(F1a); writeln(F1b);...; writeln(F1c); — после вывода в файл любого параметра туда добавляется перевод на новую строку.
Оператор writeln; без параметров используется для перехода на новую строку.
Форматный вывод в текстовый файл:
· write(F1x:n1) — вывод значения целой, вещественной, булевской или строковой величины x (либо x как элемент множества) в правую сторону поля длинной n1. Если x - вещественная величина, она выводится в научной нотации.
· write(F1x:n1:n2) — вывод вещественной величины x в нотации с фиксированной десятичной точкой, n2 (лежащее от 0 до 24) — число знаков после точки. Например, при x=1.234567e-987 оператор write(F1x:12:3) дает -1.234e-0987, а write(F1x:12:2) дает -1.23e-0987.
Оператор read(F, a) читает из файла, назначенного файловой переменной F, значение с текущего места позиционирования считывающей головки и передвигает головку на один элемент файла по направлению к концу файла. Установка в конец файла должна производиться программным путем с проверкой значения предопределенной переменной Eof на значение true, достигаемое в случае, если вместо следующего элемента в файле стоит маркер конца файла.
Консоль (монитор и клавиатура компьютера) является файлом чтения/записи по умолчанию, когда файловая переменная не указывается. Запись эквивалентна выводу в текстовом режиме на экран, чтение – вводу с клавиатуры. В Delphi такой формы операторов wride, writeln, read, reddln пользуются только в специальном режиме имитации консоли.
Оператор readln; обычно используют для приостановки работы программы до нажатия пользователем клавиши <Enter>, readln(a) — для ввода с клавиатуры значения переменной a.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |


