.
1. Load (, Workers. txt) . . : , . .
2. Calc
. .
3. Save .
+----------------------+---+----------+----------+
| || | |
+----------------------+---+----------+----------+
| | 15| 6300.00| 3937.50|
| | 24| 5600.00| 5600.00|
|... |...|... |... |
+----------------------+---+----------+----------+
| | 23687.50|
+-------------------------------------+----------+
: 40 , 3 , 10 . , . .
4. SortByName .
5. : Workers. dat, , Pay. txt, , ByName. txt.
.
1. SortByPay . , ByPay. txt.
2. . 5, 10 15 . . .
:
.
, :
1. :
. , , :
1. ,
. .
2. , .
Load. : .
. .
1. .
2. .
3. n 0.
4. , :
. n 1.
. n - .
|
|
. n ‑ .
5. .
6. .
7. " : ", n.
. .
Calc.
. .
1. Total 0.
2. i 1 n, :
. n - 2- .
. n - Total.
3. .
. .
Save. : .
. .
1. .
2. .
3. i 1 n, :
. n - : , , , .
4. .
5. .
6. .
. .
SortByName.
. .
1. Last n.
2. Cmp 0.
3. :
. Stop "".
. Last 1.
. i 1 Last, :
1. Cmp 1.
2. i - (i +1)-, :
. i - (i +1)- .
. Stop "".
. .
4. , Stop "".
5. " : ", Cmp.
. .
Lab5.
. .
1. " Workers. dat ".
2. .
3. " Pay. txt ".
4. .
5. " ByName. txt ".
6. .
7. " ByPay. txt ".
. .
program Lab5;
{$APPTYPE CONSOLE}
uses SysUtils;
type
Worker=record
Name:string;
Days:Integer;
Salary,Pay:Real;
end;
var
Days:Integer;
W:array [0..1000] of Worker;
n:Integer;
Total:Real;
procedure Load(const Name:string);
var
F:Text;
begin
Assign(F,Name);
Reset(F);
Readln(F,Days);
n:=0;
while not Eof(F) do
begin
Inc(n);
Readln(F,W[n].Name);
Readln(F,W[n].Days,W[n].Salary);
end;
Close(F);
Writeln(' : ',n);
end;
procedure Calc;
var
i:Integer;
begin
Total:=0;
for i:=1 to n do
begin
W[i].Pay:=Round(W[i].Salary*W[i].Days/Days*100)
/100;
Total:=Total+W[i].Pay;
end;
end;
procedure Save(const Name:string);
var
F:Text;
i:Integer;
begin
Assign(F,Name);
Rewrite(F);
Writeln(F,'+--------------+---+------+-------+');
Writeln(F,'| || ||');
Writeln(F,'+--------------+---+------+-------+');
for i:=1 to n do
Writeln(F,'|',W[i].Name,'':40-Length(W[i].Name),
'|',W[i].Days:3,'|',W[i].Salary:10:2,
'|',W[i].Pay:10:2,'|');
Writeln(F,'+--------------+---+------+-------+');
Writeln(F,'| |',
Total:10:2,'|');
Writeln(F,'+--------------+---+------+-------+');
|
|
Close(F);
end;
procedure SortByName;
var
Stop:Boolean;
Last,Cmp,i:Integer;
Temp:Worker;
begin
Last:=n;
Cmp:=0;
repeat
Stop:=True;
Dec(Last);
for i:=1 to Last do
begin
Inc(Cmp); { }
if W[i].Name>W[i+1].Name then
begin
Temp:=W[i];
W[i]:=W[i+1];
W[i+1]:=Temp;
Stop:=False;
end;
end;
until Stop;
Writeln(' : ',Cmp);
end;
procedure SortByPay;
var
Stop:Boolean;
Last,Cmp,i:Integer;
Temp:Worker;
begin
Last:=n;
repeat
Stop:=True;
Dec(Last);
for i:=1 to Last do
begin
Inc(Cmp); { }
if W[i].Pay>W[i+1].Pay then
begin
Temp:=W[i];
W[i]:=W[i+1];
W[i+1]:=Temp;
Stop:=False;
end;
end;
until Stop;
Writeln(' :',Cmp);
end;
begin
Load('Workers.txt');
Calc;
Save('Pay.txt');
SortByName;
Save('ByName.txt');
SortByPay;
Save('ByPay.txt');
Readln; { }
end.
Workers. txt: | 15 6300 24 5600 19 4350 15 4800 21 4350 12 7800 |
Pay. txt:
+---------------------------+---+----------+----------+
| || | |
+---------------------------+---+----------+----------+
| | 15| 6300.00| 3937.50|
| | 24| 5600.00| 5600.00|
| | 19| 4350.00| 3443.75|
| | 15| 4800.00| 3000.00|
| | 21| 4350.00| 3806.25|
| | 12| 7800.00| 3900.00|
+---------------------------+---+----------+----------+
| | 23687.50|
+------------------------------------------+----------+
.
ByName. txt:
+---------------------------+---+----------+----------+
| || | |
+---------------------------+---+----------+----------+
| | 24| 5600.00| 5600.00|
| | 21| 4350.00| 3806.25|
| | 15| 4800.00| 3000.00|
| | 15| 6300.00| 3937.50|
| | 19| 4350.00| 3443.75|
| | 12| 7800.00| 3900.00|
+---------------------------+---+----------+----------+
| | 23687.50|
+------------------------------------------+----------+
.
ByPay. txt:
+---------------------------+---+----------+----------+
| || | |
+---------------------------+---+----------+----------+
| | 15| 4800.00| 3000.00|
| | 19| 4350.00| 3443.75|
| | 21| 4350.00| 3806.25|
| | 12| 7800.00| 3900.00|
| | 15| 6300.00| 3937.50|
| | 24| 5600.00| 5600.00|
+---------------------------+---+----------+----------+
| | 23687.50|
+------------------------------------------+----------+
.
:
, , , , O (n2).