Новые сообщения · Правила  
  • Страница 1 из 1
  • 1
упорядкування текстового файлу по 2-м перших буквах
програма підраховує кількість рядків в текстовому файлі (до 1000 000 рядків) і сортує його за двома першими буквами , а результат записує в тій же папкі із імям "OBR назва вхідного файла" . текстовий файл з 46068 рядками сортує сортуванням Вибору за 23 секунди а пузирковим сортуванням за 112
 .Добавлено (25.03.13, 18:38)
---------------------------------------------
program pz1;

uses crt ;

var i,a,b,c,d,n ,stroki : longint;

l,s ,h: string;

p,f:text;

k:array[1..1000000] of string;

{===================================}

procedure con_file;

begin

i:=length(l);

a:=0;

for n:=1 to i do if l[n]=#92 then a:=n;

h:=copy(l,0,a)+'OBR '+copy(l,a+1,i-a);

end;

{===================================}

procedure shit_file;

begin

writeln('введить путь к файлу , имя с розришениям');

readln(l);

assign(f,l);

stroki:=0;

reset(f);

while not eof(f) do

begin

readln(f,s);

k[stroki+1]:=s;

stroki:=stroki+1;

end;

close(f);

writeln('количество строк == ',stroki);

con_file;  {назничение адреса для вих. файла}

end;

{===================================}

procedure zagon_v_fil;

begin

assign(p,h); {запись упорядоченой матрици}

rewrite(p);

for i:=1 to stroki do writeln(p,k[i]);

close(p)

end;

{===================================}

procedure sort_vibora;              // сортировка вибора

begin

i:=1;c:=1;

while i <= stroki do

begin

d:=i;l:=k[i];

for b :=c to stroki do

begin

if (l[1] = k[b][1]) and (l[2] > k[b][2]) then

begin

l:=k[b];

d:=b;

end   else

if l[1] > k[b][1] then

begin

l:=k[b];

d:=b;

end;

end;

s:=k[i];k[i]:=k[d];k[d]:=s;  //замена местамы строк

c:=c+1;i:=i+1;             //елементи щотчика цикла

end;

end;

{===================================}

procedure sort_puzir;                 {пузирькова сортировка}

begin

d:=1;

while d < stroki do

begin

i:=1;c:=2;

while i < stroki do

begin

if (k[i][1] = k[c][1]) and (k[i][2] > k[c][2]) then

begin

s:=k[i];k[i]:=k[c];k[c]:=s;

end   else

if k[i][1] > k[c][1] then

begin

s:=k[i];k[i]:=k[c];k[c]:=s;

end;

i:=i+1;c:=c+1;

end;

d:=d+1;

end;

end;

{==================================}

begin

clrscr;

shit_file;

writeln('виберите сортировку (1- вибора 2-пузирькова )');

readln(i);

writeln('начало роботы пограми...');

if i=1 then sort_vibora else

if i=2 then sort_puzir else writeln('ошибка ввода');

zagon_v_fil;

writeln('робота програми завершена');

readln;

end.


Verhovny Menko
1 | Автор: Verhovny_Menko | 2013-03-25, 18:38 | Изменено: Verhovny_Menko - Пн, 2013-03-25, 19:06   |  Репутация: [ + 7 ]
  • Страница 1 из 1
  • 1
Поиск: