Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Билет 11. Анализ текстовых файлов. Сортировка текстовых файлов. Одной из типичных задач анализа файла является вычисление объёма текстового файла. При этом, в понятие объёма может вкладываться различный смысл: от общего числа символов в файле, до более утонченных оценок, например учитывающих только информационные символы (без управляющих символов), специальным образом учитывающим пробелы, отдельно учитывающим русские и латинские символы, текст и формулы и др. Ниже приведён пример одной из программ вычисления объема текстового файла в авторских листах:
program volume; { Расчет объема файла, где цепочки пробелов учитываются как один символ}
uses CRT, DOS;
const pg=#12;
var total:pathstr;str:dirstr;fn:namestr;fr:extstr;
ft:text;alfa,beta:Boolean;
j,page:byte;a,symb:longint;author:real;
procedure setdisc;
var c:string;
begin writeln(' Установите дискету с файлом ', fn,' и нажмите enter');
readln(c);{$I-}reset(ft);{$I+}
if IOResult<>0 then begin writeln(' Файл ',fn,' не найден!');readln;halt end; end{setdisc};
procedure checknm;
var i:byte;digit:set of '0'..'9';
begin if str <>'' then
begin for i:=1 to length(str) do if not (str[i] <>' ') then
if (str[i]='-') and (str[i+1] in digit) then str:='';
alfa:=false; end; end{checknm};
BEGIN page:=1;symb:=0;a:=0;alfa:=false;beta:=false;
writeln(' Введите полное имя анализируемого файла:');
readln(total);assign(ft,total);fsplit(total,str,fn,fr);
{$I-}reset(ft);{$I+} if IOResult<>0 then
begin for j:=(length(total)-length(fn)-length(fr)) downto 1 do
if total[j] in ['A'..'Z','a'..'z'] then
if not (total[j] in ['a','A','b','B']) then
begin writeln(' Файл ',fn,' не найден');readln;halt end
else 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;
if beta and not (str[j] in [pg,' ']) then
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. Сортировка текстовых файлов.
Сортировка файлов - весьма распространенная процедура, направленная на повышение эффективности многих важных процессов обработки файлов. Сортировка - ключевая процедура для всего цикла обработки. Распространенный метод сортировки - метод "трёх лент".
Сортировка файла должна использовать дополнительные файлы для хранения промежуточной информации. Метод "трёх лент" использует для этих целей два дополнительных файла, а основной идеей сортировки является чередование фаз "разделения" и "слияния" файлов до получения полностью отсортированного файла.
Если столбцы заданной прямоугольной целочисленной матрицы расположены в порядке возрастания числа нулевых элементов в них, то подсчитать число нулевых элементов во всей матрице, иначе определить столбец с максимальным количеством нулей.
program z433_11;
uses Z12433_11;
Var A:matr;
S:mass;
i,j,ch,nmax:integer;
BEGIN
for i := 1 to n do
for j := 1 to m do
readln(A[i,j]);
NulS(A,S);
if Vozr(S) then
Begin
NulCh(S,ch);
write('ch: ');
writeln(ch);
end
else Begin
Maximum(S,nmax);
write('nmax: ');
writeln(nmax);
end;
END.
Unit Z433_11;
interface
Const n = 3;
m = 4;
Type matr = array[1..n,1..m] of integer;
mass = array[1..m] of integer;
procedure NulS(A:matr; Var S:mass);
{Записывает в массив S число нулей в каждом столбце}
function Vozr(S:mass):boolean;
{возвращает true, если в массиве S элементы расположены в порядке возрастания}
procedure NulCh(S:mass; Var ch:integer);
{ch - количество нулей в матрице}
procedure Maximum(S:mass; Var nmax:integer);
{nmax - номер столбца с максимальным количеством нулей}
implementation
procedure NulS(A:matr; Var S:mass);
Var i,j,k:integer;
Begin
for j := 1 to m do
Begin
k := 0;
for i := 1 to n do
if A[i,j] = 0 then k := k + 1;
S[j] := k;
end;
end; {NulS}
function Vozr(S:mass):boolean;
Var i,k:integer;
b:boolean;
Begin
k := 0;
for i := 2 to m do
if S[i] > S[i-1] then k := k + 1;
if k = m - 1 then b := true
else b := false;
Vozr := b;
end; {Vozr}
procedure NulCh(S:mass; Var ch:integer);
Var i:integer;
Begin
ch := 0;
for i := 1 to m do
ch := ch + S[i];
end; {NulCh}
procedure Maximum(S:mass; Var nmax:integer);
Var i,max:integer;
Begin
max := S[1];
nmax := 1;
for i := 2 to m do
if S[i] > max then
Begin
max := S[i];
nmax := i;
end;
end; {Maximum}
END.