Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие для учеников .doc
Скачиваний:
12
Добавлен:
18.12.2018
Размер:
2.27 Mб
Скачать

Пример 2

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

Решение

Так как по условию задачи каждый оператор зани­мает не более одной строки, то будем подсчитывать ко­личество открывающих и закрывающих скобок в каж­дой строке.

Program Example_86;

Var F: Text;

k1, k2, n: Integer;

Ch: Char;

Logic, Pp: Boolean;

Begin {С файловой переменной F связываем

файл на диске}

Assign(F, 'TEST.PAS');

Reset(F); {Открываем файл для чтения}

n:=0; {Счетчик количества строк}

Logic:=True; {Пока ошибок не было,

переменная Logic имеет значение True}

While Not EOf (F) Do

{Пока не достигнут конец файла}

Begin

Inc(n); {Увеличиваем счетчик

количества строк}

k1:=0; {Счетчик количества

открывающих скобок}

k2:=0; {Счетчик количества

закрывающих скобок}

Pp:=False; {Переменная Pp

предназна­чена для определения ошибки расста­новки скобок в строке. Она

принимает значение True, когда

обнаруживается ошибка}

While Not Eoln (F) Do {Пока не

достигнут конец текущей строки файла}

Begin

Read(F, Ch); {Читаем очередной

символ строки. Если встретили

открывающую скобку, то увеличиваем

соответствующий счетчик}

If Ch='(' Then Inc(k1);

{Если закрывающая скобка стоит

после открывающей (k1>k2), то

просто уве­личиваем счетчик. Иначе –

устанавли­ваем Pp в True}

If (Ch=')') Then

If (k1>k2) Then Inc(k2)

Else Pp:=True;

End;

{Если не все закрывающие скобки

расставлены (k1<>k2) или одна из

закрывающих скобок стоит раньше

открывающей (Pp=True), то была

ошибка расстановки}

If (k1<>k2) or Pp Then

Begin

Writeln('Ошибка в ',N,' строке');

Logic:=False;

End;

Readln(F);{Переходим на следующую

строку файла}

End;

{Если значение переменной Logic осталось

ис­тинным, то ошибок расстановки не было}

If Logic Then

Writeln('Cкобки расставлены правильно');

Close(F); {Закрываем файл}

Readln;

End.

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

При объявлении нетипизированного файла указывается только ключевое слово, например:

Var F: File.

Нетипизированные файловые переменные предназначены для низкоуровневой работы с файлами.

С их помощью можно обратиться к файлу любого типа и логической структуры. Необходимо только учитывать, что нетипизированные файлы не имеют жестко установленной единицы чтения/записи, как типизированные файлы. В нетипизированных файлах за одно обращение считывается/записывается число байт, приблизительно равное величине буфера ввода/вывода, что способствует увеличению скорости работы с файлами. В качестве буфера ввода/вывода нетипизированных файлов может выступать любая переменная.

Для работы с нетипизированными файлами можно применять почти все процедуры и функции, что и для типизированных. Исключение составляет то, что вместо процедур Read и Write используются процедуры BlockRead и BlockWrite, а процедуры Reset и Rewrite могут иметь второй параметр типа Word, который определяет размер записи, используемый при передаче данных. Если этот параметр опущен, то размер записи принимается по умолчанию равным 128 байтам.