- •Структура программы на Паскале.
- •Стандартные типы Паскаля.
- •Операторы в Паскале.
- •Цикл с параметром.
- •Типовые задачи на операторов цикла.
- •Операторы целочисленного деления.
- •Вложенные циклы.
- •Структурированные типы данных.
- •Массивы.
- •Многомерные массивы.
- •Строки.
- •Множества.
- •Записи.
- •Работа с текстовыми файлами.
- •Особенности работы с текстовым файлом:
- •Типизированные файлы.
- •Особенности работа с типизированными файлами.
- •Подпрограммы.
- •Структура подпрограмм.
- •1. Заголовок
- •2. Описательная часть
- •3. Тело подпрограммы
- •Оформление формальных параметров, которые определяет режим взаимодействия с основной программой.
- •Особенности передачи структурированных данных подпрограммы.
- •Опережающие описания.
- •Функциональный тип. Процедурный тип.
- •Сортировки.
- •Сортировка бинарными включениями.
- •Сортировка простых выборов.
- •Сортировки простым обменом.
- •Шейкер-сортировка.
- •Сортировка Шелла.
- •Модули.
- •Структура модуля.
- •Особенности компиляции программ с подключаемыми модулями.
- •Циклические ссылки модулей друг на друга.
- •Стандартные модули в Паскале.
- •Динамические переменные.
- •Динамические структуры.
- •Однонаправленные списки.
- •Формирование списков. Формирование очереди.
- •Формирование стека.
- •Классическое формирование очереди (по Вирту).
- •Работа со списками.
- •1) Проход по списку;
- •2) Добавление элемента в список;
- •Удаление элемента из списка.
- •«Древовидные структуры»
- •Удаление элемента из дерева
- •Самоупорядочивающийся список
- •Частотный словарь
- •Нерекурсивное формирование дерева
Работа с текстовыми файлами.
Текстовый файл – файл последовательного доступа, информация в котором представлена в виде текста (символов или строк). Для того, чтобы записать или считать n-ый элемент, необходимо производить операцию записи или чтения (n-1) предыдущих элементов.
Особенности работы с текстовым файлом:
-
Только для текстовых файлов используется открытие файла APPEND (имя файловой переменной) – процедура для дозаписи файла, он отрывается для записи, маркер файла устанавливается за последним элементом в текстовом файле.
-
Т.к. информация в текстовом файле представлена в виде строк (маркеры конца строки #10#13), то только для текстовых файлов можно использовать процедуры readln и writeln и использовать функцию EOLN (<имя файловой переменой>); становится автоматически истиной, если считывается маркер конца строки.
-
Т.к. при чтении (записи) могут возникать различные сочетания типа буфера чтения (переменной), в которую считывается информация из файла из операторов чтения read и readln, соответственно возникают 4 случая:
а) если из файла считывается информация посимвольно с использованием read, то корректно считается только первая строка; если будет организован цикл до конца файла, то он будет зацикливаться, т.к. оператор read не переводит указатель файла при чтении (записи) на новую строку, поэтому для корректного считывания информации необходимо обеспечить при чтении маркера конца строки перевод маркера файла на новую строку – используем условный оператор.
var t:text;
c:char;st:string;
.......................
repeat read(t,c);
if eoln(t) then readln(t);
until eof(t);
б) если при посимвольном считывании информации с текстового файла используется readln, то зацикливания не будет, но из файла считаются только первые символы из каждой строки.
в) если из файла считываются строки при помощи read, то возникает проблема, как в пункте 1. Ее решение аналогично, только вместо условного оператора используется readln.
var t:text;
c:char;st:string;
........................
repeat read(t,st);
readln(t);
until eof(t);
г) если для построкового считывания используется readln, то дополнительных приемов применять не нужно.
Пример. Текстовый файл можно сформировать непрограммно. Для этого используется блокнот. Рассмотрим формирование текстового файла по строкам, используя принцип «yes/no».
var t:text;st:string;
c:char;
begin writeln(‘Введите имя файла’);
readln(st);
assign(t,st);rewrite(t);
repeat
writeln(‘Введите строку’);
readln(st);
writeln(t,st);
writeln(‘Будете вводить строку?’ y/n);
readln(c);
until (c=’y’) or (c=’n’);
close(t);end.
Пример. Задан текстовый файл. Вывести на экран слова из этого файла в столбик (без формирования слова).
var t:text;c:char;
zp:set of char;
begin assign(t,’text.txt’);
reset(t);
zp:=[‘.’,’,’,’ ‘,#10#13];
repeat read(t,c);
if (c in zp) or (eof(t)) then writeln
else write(c);
if eoln(t) then readln(t);
until eof(t);end.
Пример. С выделением слова из файла.
var t:text;c:char;st:string;
zp:set of char;
begin assign(t,’text.txt’);
reset(t);
zp:=[‘.’,’,’,’ ‘,#10#13];
repeat st:=’’;read(t,c);
while (not(c in zp) and (not eof(t)) do
begin st:=st+c;read(t,c);end;
if eoln(t) then readln(t);
if st<>’’ then writeln (st);
until eof(t);end.
Алгоритм внесения изменений в файл любого типа.
Только для текстового файла, используя открытие файла APPEND, можно дописать информацию. Если необходимо изменить информацию (удалить, добавить, изменить), необходимо использовать вспомогательный файл. Сам же алгоритм выглядит следующим образом:
-
считываем информацию из исходного файла;
-
обработка информации;
-
измененную информацию записываем во вспомогательный файл;
-
закрываем оба файла (исходный и полученный);
-
удаляем исходный файл (ERASE(t));
-
вспомогательный файл переименовываем в имя исходного файла (RENAME (v,st)).
Примечание:
-
Для реализации алгоритма имя исходного файла необходимо хранить в некоторой строковой переменной до конца отработки этого алгоритма.
-
Алгоритм у пользователя создает иллюзию, что система работает с одним только файлом.
Пример. Из файла, в котором расположены фамилии, получить изменения, отсортировав фамилии в нем по алфавиту по первой букве.
var v,t:text;
name,st:string;
ch:’a’..’z’;
begin writeln (‘Введите имя файла’);
readln(name);
assign(v,’text.txt’);
assign(t,name); rewrite(v);
for ch:=’a’ to ‘z’ do
begin reset(t);
repeat readln(t,st);
if st[1]=ch then writeln(v,st);
until eof(t);
close(t);
end;
close(f);
erase(t);rename(v,name);
end.
Алгоритм добавления, удаления, замещения информации в файле любого типа.
1) Переносим информацию из исходного файла в вспомогательный до точки добавления, удаления, замещения.
2) Если добавление информации, то записываем информацию в вспомогательный файл.
Если удаление, то считываем эту информацию из исходного файла, а в вспомогательный не записываем.
Если замешаем информацию, то считываем из исходного файла, а затем записываем в вспомогательный на которую необходимо сделать замену.
3) Переписываем оставшуюся информацию из исходного файла в вспомогательный. Закрываем оба файла. Исходный удаляем. Вспомогательный переименовываем именем исходного.
Пример. Задан текст. Заменить слова в нем «ЭВМ» на «машина».
var v,t:text;
name,st:string;
mn:set of char; c:char;
begin writeln(‘Введите имя файла’);
readln(name);
assign(v,’text.txt’);
assign(t,name);rewrite(v);
mn:=[‘.’,’,’,’ ‘];
repeat st:=’’;
read(t,c);
while (not (c in mn)) and (not eof(t)) and (not eoln(t)) do begin st:=st+c;
read(t,c);end;
if st=’ЭВМ’ then write(v,’машина’);
else write(v,st);
if c in mn then write (v,c);
if eoln(t) then begin
readln(t);
writeln(v);
end;
until eof(t);
close(t);
close(v);
erase(t);
rename(v,name);
end.