Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование(лекции).pdf
Скачиваний:
183
Добавлен:
14.02.2015
Размер:
1.89 Mб
Скачать

П.П.Кудрявцев. Курс лекций по дисциплине: "Информатика и программирование"

exclude исключает элемент из множества .Обращение : exclude(s, i);

Параметры обращения такие же, как у процедуры include;

В отличие от операций «+» и «-», реализующих аналогичные действия над двумя множествами, процедуры оптимизированы для работы с одиночными элементами множества и поэтому отличаются высокой скоростью выполнения.

Пример использования множес тв

Дана символьная строка. Подсчитать в ней количество знаков препинания (.-,;:!*?) . program P1;

var

S: string; I, K: byte;

begin readln(S); K:=0;

for I : = 1 to Length(S) do

if S[I] in ['.', '-', ',', ';', ':', '!', '*', '?'] then K := K + 1;

writeln('Число знаков препинания равно', К); end.

В этом примере использована множественная константа с символьным типом элементов. Эту задачу можно решить и без множества, записав в операторе if длинное логическое выражение:

(S[I] = '.') or (S[I] = '-') и т.д. Использование множества сокращает запись.

Лекция 13. Файлы

ВПаскале понятие файла употребляется в двух смыслах:

именованная область внешней памяти компьютера (внешний файл);

переменная файлового типа (внутренний файл).

Впрограмме между этими объектами устанавливается связь. Вследствие этого все, что происходит в процессе выполнения программы с внутренним файлом, дублируется во внешнем файле. С элементами файла можно выполнять только две операции: читать из файла

изаписывать в файл.

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

Файл можно представить как последовательную цепочку элементов, пронумерованных от 0, заканчивающуюся специальным кодом, называемым маркером конца:

56

Лекция 13. Файлы

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

ВПаскале выделяют три вида файлов:

типизированные файлы;

нетипизированные файлы;

текстовые файлы.

Типизированный файл объявляется следующим образом: var

<имя переменной>: file of <тип элемента>;

где <тип элемента> может быть любым, кроме файлового. Например:

Var

Fi: File Of Integer; Fr: File Of Real; Fc: File Of Char;

Нетипизированный файл: var

<имя переменной>: file;

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

var

<имя переменной>: text;

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

Дос туп к файлам

Любой программе доступны два предварительно объявленных файла со стандартными файловыми переменными: input для чтения данных с клавиатуры и output для вывода на экран. Стандартный Паскаль требует обязательного упоминания этих файлов в заголовке программы, например так:

program Program1(input, output);

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

57

П.П.Кудрявцев. Курс лекций по дисциплине: "Информатика и программирование"

информацией: чтение из файла или запись в него.

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

assign(<файловая переменная>, <имя файла или логическое устройство>);

Имя файла это любое выражение строкового типа , которое строится по правилам определения имен соответствующей операционной системы.

Стандартные аппаратные средства ПК, такие как клавиатура, экран дисплея, печатающее устройство и коммуникационные каналы ввода/вывода, определяются в Паскале специальными именами, которые называются логическими устройствами.

CON

консоль клавиатура(

и экран дисплея ).Чтение производится с клавиатуры ,запись

на экран .

 

 

 

 

PRN

логическое имя принтера первоначально(

имена PRNи LPT1 синонимы

).

AUX

логическое имя коммуникационного канала первоначально(

имена AUXи

COM1

синонимы );

NUL логическое имя «пустого »устройства .

Инициация файла

Инициировать файл означает указать для этого файла направление передачи данных. В Паскале можно открыть файл для чтения, для записи информации, а также для чтения и записи одновременно.

Для того чтобы начать запись в файл, его следует открыть для записи. Это обеспечивает процедура

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

При этом указатель устанавливается на начало файла. Если в файле есть информация, то она исчезает.

Запись в файл осуществляется процедурой

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

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

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

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

В результате указатель устанавливается на начало файла. При этом вся информация в файле сохраняется.

Чтение из файла осуществляется процедурой

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

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

58

Лекция 13. Файлы

Доступ к элементам файла может быть последовательным или прямым. В стандартном Паскале реализован только последовательный доступ.

Принцип последовательного доступа: для того чтобы прочитать n-ю запись файла, сначала нужно прочитать все предыдущие записи с 1-й по (п-1)-ю.

Функция Eof (<файловая переменная>) проверяет маркер конца файла (end of file).

Это логическая функция, которая получает значение true , если указатель установлен на маркер конца, в противном случае false .

Работа с файлом в программе завершается его закрытием с помощью процедуры

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

Для создания и заполнения файла требуется следующая последовательность действий:

1.Произвести назначение (Assign).

2.Открыть файл для записи (Rewrite).

3.Записать в файл данные (Write).

4.Закрыть файл (Close).

Для последовательного чтения данных из файла требуется выполнить следующие действия:

1.Выполнить назначение (Assign).

2.Открыть файл для чтения (Reset).

3.В цикле читать из файла (Read).

4.Закрыть файл (close).

Впрограммах на Паскале для работы с текстовыми файлами наряду с процедурами Read и Write употребляются процедуры ReadLn и WriteLn.

ReadLn(<файловая переменная>, <список ввода>);

Эта процедура читает строку из файла, помещая прочитанное в переменные из списка ввода.

WriteLn(<файловая переменная>, <список вывода>);

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

Для обнаружения конца строки в текстовом файле используется функция Eoln(<файловая переменная>);

(End of line конец строки ).Это логическая функция ,которая принимает значение true, если указатель файла достиг маркера конца строки и false в противном случае .

Употребление операторов Read и ReadLn без указания имени файловой переменной обозначает чтение из стандартного файла input (ввод с клавиатуры). Употребление операторов Write и WriteLn без имени файловой переменной обозначает запись в стандартный файл Output (вывод на экран).

При вводе с клавиатуры маркер конца строки обнаруживается при нажатии на клавишу

Enter.

Процедура ReadLn может использоваться без списка ввода. В этом случае происходит

59

П.П.Кудрявцев. Курс лекций по дисциплине: "Информатика и программирование"

пропуск текущей строки в читаемом файле.

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

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

Пример 1. Создать файл, содержащий среднесуточные температуры за некоторое количество дней. При этом необязательно предварительно указывать количество чисел во вводимой информации. Можно договориться о каком-то условном значении, которое будет признаком конца ввода. Пусть, например, признаком конца ввода будет число 9999.

program Таsk1 ; var

Ft: File Of Real; T: Real;

begin Assign(Ft,'Temp.dat'); Rewrite(Ft) ;

WriteLn('Вводите данные. Признак конца - 9999'); ReadLn (T);

While T<>9999 Do Begin

ReadLn(T)

End;

WriteLn('Ввод данных закончен!'); Close(Ft)

End.

Пример 2. Определить среднюю температуру для значений, хранящихся в файле Temp.dat. program Task2;

var

Ft: File Of Real; T, St: Real;

N: Integer; begin

assign(Ft,'Temp.dat');

Reset(Ft);

St:=0;

While Not Eof(Ft) Do Begin

Read(Ft,T);

60

Лекция 13. Файлы

St:=St+T

End; N:=FileSize(Ft) ; St:=St/N;

WriteLn('Средняя температура 3a',N:3,'суток равна',St:7:2,'гр-в'); Close(Ft)

End.

В этой программе использована функция определения размера файла:

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

Ее результат целое число ,равное текущей длине файла .

61