Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

If beta and not (str[j] in [pg,' ']) then

Else

If not (total[j] in ['a','A','b','B']) then

If total[j] in ['A'..'Z','a'..'z'] then

begin writeln(' Файл ',fn,' не найден');readln;halt end

begin setdisc;break end;

end;

repeat readln(ft,str); if str<>'' then

begin symb:=symb+length(str); for j:=1 to length(str) do

begin if alfa then checknm;

if str[j]=pg then begin page:=page+1;alfa:=true end;

if not (str[j] in [pg,' ']) and (not alfa) then inc(a);

if str[j]=' ' then beta:=true;

begin inc(a);beta:=false end;

end;

end;

until eof(ft);

author:=a/40000; clrscr;gotoXY(10,10);

write(' ОБЪЕМ ТЕКСТА ',fn);gotoXY(10,11);

write(' Страниц: ',page);gotoXY(10,12);

write(' Всего символов в тексте: ',symb);gotoXY(10,13);

write(' Объем в авторских листах: ',author:2:3);

gotoXY(10,14); for j:=20 to 80 do write('_');writeln; readln;

END {volume}.

 

4. Сортировка текстовых файлов.

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

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

Пусть требуется сортировать по возрастанию записей файл F, состоящий из последовательности записей-чисел R1,R2,...Rn, где n - число записей. Чтобы сформулировать эффективный критерий "разделения" файла, введём понятие:

Отрезок монотонности файла - это последовательность записей Ri,Ri+1, Ri+2,... Ri+m файла, удовлетворяющая условию:

Ri <= Ri+1<= Ri+2 <=..Ri+m и Ri-1>Ri, если i>1; Ri+m>Ri+m+1, если i+m<n.

Другими словами, отрезок монотонности - это последовательность упорядоченных записей файла, к которой не может быть добавлена ни одна запись слева или справа без нарушения свойства монотонности (этот отрезок может состоять, в частности, и из одной единственной записи). В файле может быть несколько непересекающихся отрезков монотонности Q1,Q2,...Qt, осуществляющих разбиение файла.

Для " разделения " заданного файла F на два файла F1 и F2 используем следующий критерий: при последовательном просмотре файла F отрезки монотонности с нечётными номерами Q1,Q3,... записываются в F1, а с чётными номерами Q2,Q4,... - в F2.

" Слиянием " файлов F1 и F2 в файл F назовем процесс записи в F следующей последовательности компонентов F1 и F2:

1) минимальный из первых компонентов F1 и F2;

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

3) если буфер пуст, то записи подлежит каждый прочитанный компонент в оставшейся части файла F1 или F2.

Каждый цикл "разделение-слияние" будет уменьшать количество отрезков монотонности в два раза, так как каждая пара отрезков (отрезок из F1 и отрезок из F2) будет слита в один отрезок в F. Таким образом, процесс сходится к состоянию, содержащему один отрезок монотонности (т.е. к отсортированному файлу F) не более чем за log2 (t) циклов "разделение-слияние".

Ниже приводится процедура сортировки текстового файла, реализующая описанный выше метод "трёх лент", оформленная в виде модуля Турбо Паскаля s_text и пример её использования - сортировка текстового файла по страницам:

 

UNIT s_text; {Модуль-процедура sort_file}

 

<== предыдущая лекция | следующая лекция ==>
Лекции 21-22: Основные задачи обработки файлов | Implementation. procedure sort_file(var f:text;r:Boolean);
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 214; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.