Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Текст программы. procedure Load(const Name:string);



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





Дата публикования: 2014-11-29; Прочитано: 371 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.01 с)...