.


:




:

































 

 

 

 


5.




.

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).

 





:


: 2016-12-17; !; : 1888 |


:

:

,
==> ...

1362 - | 1330 -


© 2015-2024 lektsii.org - -

: 0.053 .