//Parayti programa irinkimo ruiavimo algoritmui, kuri dirba daug kartu ir //
//ruiuoja ivairiu dydiu failus (failu dydiai atsitiktiniai), matuodama //
//darbo laika, skaiciuodama lyginimo operaciju kieki, ir sudaro tokiu darbo //
//laiku ir lyginimo operaciju kiekiu pasiskirstyma. //
//5 Gr studento, Lino Mockaus //
program Pirma_20;
Uses sysutils, crt;
Const T = 32000;
ilgis = 100;
Type
TMas = array[1..T] of string[ilgis];
Var A: TMas; n, x, pal :integer; sek :double;
//------------------------------------------------------------------------------
procedure KurtiRandFaila;
var F: text; i, s, m :integer;
begin
Assign (F, 'tmp.txt');
ReWrite(F);
Randomize;
m := Random(T);
for i:= 1 to m do
begin
s := Random(9);
Write(F,s);
if (i mod ilgis = 0) then Write(F, ' ' );
end;
Close(F);
end;
//------------------------------------------------------------------------------
procedure SkaitytiFaila (Var A : TMas; var n : integer);
var F:text; c :char; i :integer;
begin
Assign (F, 'tmp.txt');
Reset(F);
n := 0;
Read (F, c);
while NOT EoF (F) and (n<T)do
begin
n := n + 1;
A[n] := '';
while (c <> ' ') and (c <> #26) do
begin
A[n]:= A[n] + c;
Read (F, c);
end;
Read(F,c);
end;
Close(F);
end;
//------------------------------------------------------------------------------
function times ( tend: boolean; var tinit: double ): double;
var
mseconds: double;
TS : TTimeStamp;
DT : TDateTime;
begin
if tend = false then begin
TS:=DateTimeToTimeStamp(Now);
tinit := TimeStampToMSecs ( TS );
end
else begin
TS:=DateTimeToTimeStamp(Now);
mseconds := ( TimeStampToMSecs ( TS ) - tinit );
times := mseconds;
end;
end;
//------------------------------------------------------------------------------
procedure Isrinkimas(Var A : TMas; n : integer; var pal: integer);
var i,j,min:integer; t : string[ilgis];
begin
pal := 0;
for i := 1 to n-1 do
begin
min := i;
for j :=i+1 to n do
if A[j] < A[min] then begin min := j; pal := pal +1; end;
t := A[min];
A[min] := A[i];
A[i] := t
end;
end;
//------------------------------------------------------------------------------
begin
Write ('Kiek skirtingu failu sukurti: ');
ReadLn(x);
WriteLn ('|---------------------------------------------------------------------|');
WriteLn ('| Duomenu kiekis | Palyginimu skaicius | Laikas |');
while (x>0) do
begin
// KurtiRandFaila;
SkaitytiFaila(A,n);
times(false,sek);
Isrinkimas (A,n, pal);
// delay (2000);
WriteLn('| ', n:14, ' | ' ,pal:20,' | ', times(true,sek), ' |');
x := x - 1;
end;
WriteLn ('|---------------------------------------------------------------------|');
Readln;
end.