Курс лекций для специальности «Прикладная математика» Первый семестр
Вид материала | Курс лекций |
СодержаниеБазовым типом 8.3 Процедуры открытия и закрытия файлов 8.4 Процедуры ввода/вывода |
- Курс лекций для специальности Прикладная математика и информатика, 774.04kb.
- Календарный план лекций по курсу «математический анализ» Для специальности «Математика», 39.98kb.
- Рабочая программа, 160.99kb.
- Рабочая программа, 182.62kb.
- Цифровая обработка сигналов, 137.86kb.
- Курс лекций (28 часов) канд филос наук О. В. Аронсон Курс лекций «Математика и современная, 27.49kb.
- Урс «Численное решение обыкновенных дифференциальных уравнений» читает кафедра фн-2, 24.78kb.
- Курс IV семестр 8 Всего аудиторных занятий 52 Лекций, 117.53kb.
- Курс лекций в электронной форме содержит все лекции предусмотренные программой дисциплины, 32.88kb.
- Календарный план учебных занятий по обязательной дисциплине «Дискретная математика, 109.62kb.
Лекция 8
8.1 Множества
Переменная, относящаяся к типу множество, может содержать любую комбинацию величин, взятых из базового ординального типа. Каждая величина базового типа может принадлежать и не принадлежать этому множеству. Описатель множества выглядит так:
SET OF базовый тип
Базовым типом может являться любой ординальный тип, содержащий не более 255 элементов. Например: VAR set1,set2,even,anyset: SET OF 0..100;
Конструктором множества является заключенный в квадратные скобки список (через запятую) элементов множества (элементов базового типа). Элементы могут задаваться в виде выражения базового типа, либо в виде диапазона между двумя значениями, заданными выражениями. Например:
set1:=[1..20];
even:=[2,4,6,8,10,12,14,16,18,20];
set2:=[15..25];
anyset:=[3,3+2,11..15,17..4*5];
Над данными типа множество определены следующие операции:
- set1=set2 - сравнение (результат операции - FALSE);
- set1<>set2 - сравнение на несовпадение (TRUE);
- set2<=set1- входит ли set2 как подмножество в set1? (FALSE);
- set1>=even- содержит ли set1 как подмножество even? (TRUE);
- 5 in set1 - является ли 5 элементом множества set1? (TRUE).
- set1+set2 - объединение множеств - множество [1..25],
- set1*set2 - пересечение множеств - множество [15..20],
- set1-even - разность множеств - множество нечетных чисел меньших 20.
Вместо оператора cifra:=(c>='0') and (c<='9') в программе Enter_int (см. лекцию 7) можно использовать более ясную и лаконичную конструкцию
cifra:=c in ['0'..'9'].
В TP множество реализуется как последовательность бит, с помощью которой устанавливается, принадлежит (1) или нет (0) элемент, номер которого совпадает с порядковым номером бита, данному множеству. Таким образом, для базового типа из K элементов каждое множество задается строкой из K бит.
8.2 Файлы
Файл, с точки зрения программы на языке Паскаль, - это именованная структура данных, представляющая собой последовательность элементов одного типа. Количество элементов файла практически не ограничено. В первом приближении файл можно рассматривать как массив переменной длины неограниченного размера.
Все файлы можно разделить на типизированные, нетипизированные и текстовые.
Пример описаний файлов, в котором определены размеры буферов файлов различного типа:
program files;
var f1:file of real; {В стандарте f1 - переменная типа real - типизированный файл}
f2:file; {нетипизированный файл}
f3:text; {текстовой файл}
begin
writeln(sizeof(f1),sizeof(f2),sizeof(f3))
end.
Результат: 128 128 256
Работа с файлами обеспечивается набором процедур и функций, обслуживающих файлы.
Описатель для типизированного файла выглядит так:
<имя>: file of <базовый тип>;
<имя> - файловая переменная. В стандарте файловая переменная является указателем на буфер файла. В ТР, как видно из примера, это не так.
<базовый тип> - любой, кроме файлового и записи, содержащей файловый тип.
Объявление файловой переменной задает только тип компонентов файла. Чтобы программа могла выводить данные в файл или читать данные из файла, необходимо указать конкретный файл файловой системы, т. е. задать имя файла. Имя файла задается вызовом процедуры ASSIGN, связывающей файловую переменную с конкретным файлом.
assign (var f:text; <ИмяФайла>:string);
Имя файла задается согласно принятым в MS-DOS правилам. Оно может быть полным, т. е. состоять не только непосредственно из имени файла, но и включать путь к файлу. Существуют определенные договоренности при записи имени файла, например:
assign ( f, 'a:\result.txt');{Полное имя файла}
assign (f,'\students\ivanov\korni.txt'); {Указан путь относительно текущей директории}
Имя файла может быть задано строкой:
fname:='otchet.txt';
assign(f,fname);
8.3 Процедуры открытия и закрытия файлов:
RESET(F) - открытие существующего файла F на чтение (файловая переменная F связана с существующим файлом MS DOS процедурой ASSIGN). В стандартном Паскале при открытии файла на чтение в динамической памяти создается буфер файла, в который помещается первая запись файла. Для нетипизированных файлов размер записи может быть указан вторым параметром. В ТР буфером является сама файловая переменная, размер буфера в примере пункта 8.3. Если открываемый на чтение файл не существует в файловой системе, возникает ошибка этапа выполнения программы.
REWRITE(F) – создает и открывает на запись новый файл. Если файловая переменная F связана с существующим файлом, то данные этого файла уничтожаются. В стандартном Паскале при открытии файла на запись в динамической памяти создается буфер файла для промежуточного хранения записей. Для нетипизированных файлов размеры записей могут задаваться вторым параметром. В ТР буфером является сама файловая переменная, размер буфера в примере пункта 8.3.
CLOSE(F) - закрытие файла F. При закрытии файла записи содержимое буфера выталкивается в файл. В стандарте Паскаля процедура закрытия файла разрывает связь файловой переменной (указателя) с буфером и уничтожает буфер в динамической памяти.
8.4 Процедуры ввода/вывода:
WRITE(F, E) - запись значения выражения E базового типа в файл; (не применима к нетипизированным файлам)
READ(F, V) - чтение из файла записи в переменную; (не применима к нетипизированным файлам)
BLOCKREAD; BLOCKWRITE - только для нетипизированных файлов.
SEEK(F, n) - делает доступной для обработки запись n файла F (эта процедура не применима к текстовым файлам);
EOF(F) - функция, возвращает TRUE, если достигнут конец файла F.
При работе с файлами в TP очень полезна функция IORESULT, которая возвращает значение кода ошибки выполнения последней операции ввода/вывода. Следующий фрагмент является шаблоном для открытия файла на чтение. Он позволяет избежать прерывания программы при попытке открытия на чтение не существующего файла
repeat
writeln('введите имя файла'); readln(s);
assign(f,s);
{$I-} {отключение проверки ошибок в/в}
reset(f);
{$I+} {включение проверки ошибок в/в}
i:=IORESULT;
if i<>0 then begin
writeln('Ошибка',i:3);
writeln('Попробуйте еще');
end;
until i = 0;
Здесь i – переменная типа integer, s – строка. {$I-} – псевдокомментарий – директива компилятору при выполнении дальнейших действий снять контроль проверки правильности выполнения операции ввода/вывода. Если открытие файла F прошло успешно, то IORESULT возвращает значение 0, в противном случае IORESULT возвращает код ошибки, отличный от нуля.