Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.76/49: Рейтинг темы: голосов - 49, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 03.11.2008
Сообщений: 20
1

Лабораторная работа №5. Работа с файлами и алгоритмы сортировки

05.12.2008, 18:05. Просмотров 9395. Ответов 3
Метки нет (Все метки)

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 сотрудников соответственно. Записать для каж-дого списка максимальное количество сравнений из полученных при сортировке по имени и зарплате. Построить график зависимости коли-чества сравнений от длины списка.

Добавлено через 48 секунд
я создал код проги но она несовсем праильно идет помогите
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
h:Text;
begin
Assign(h,Name);
Reset(h);

Readln(h,Days);
n:=0;
while not Eof(h) do
begin
Inc(n);
Readln(h,W[n].Name);
Readln(h,W[n].Days,W[n].Salary);
end;

Close(h);

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
h:Text;
i:Integer;
begin
Assign(h,Name);
Rewrite(h);

Writeln(h,'+-------…-------+---+---…---+---…----+');
Writeln(h,'| Фамилия |Дни| Оклад |Зарплата|');
Writeln(h,'+-------…-------+---+---…---+---…----+');
for i:=1 to n do
Writeln(h,'|',W[i].Name,'':40-Length(W[i].Name),
'|',W[i].Days:3,'|',W[i].Salary:10:2,
'|',W[i].Pay:10:2,'|');
Writeln(h,'+-------…-------+---+---…---+---…----+');
Writeln(h,'|Итого |',
Total:10:2,'|');
Writeln(h,'+-------…-------+---+---…---+---…----+');

Close(h);
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.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.12.2008, 18:05
Ответы с готовыми решениями:

Алгоритмы. Работа с файлами и массивами
Всем доброго здоровья! Второй день ломаю голову над задачей не могу решить. Кому интересно...

Лабораторная "Работа с файлами и структурами данных" - обсуждение
Здравствуйте, Есть такое задание: Составить программу со следующими свойствами: 1)вводится...

Работа с файлами(Запись,чтение,работа с данными)
Здравствуйте, никак не могу осилить файлы... Для начала вот само задание: В справочной автовокзала...

Работа с файлами, чтение/работа со строкой
Доброго времени суток. Начал работать с C++ Builder 6. Есть текстовый файл .txt с различными...

3
1 / 1 / 0
Регистрация: 05.12.2008
Сообщений: 14
05.12.2008, 19:10 2
Обязательно файл должен быть текстовым???
0
0 / 0 / 0
Регистрация: 03.11.2008
Сообщений: 20
05.12.2008, 19:39  [ТС] 3
volan4ikthebest, а в файл как я должен написать текст
0
1 / 1 / 0
Регистрация: 05.12.2008
Сообщений: 14
05.12.2008, 19:55 4
Ставиш обьект - StringGrid и с него по ячейкам считываешь - он предназначен для работы с таблицами.
Закинуть процедуры???
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.12.2008, 19:55

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Лабораторная работа по С
Здравствуйте уважаемые программисты. Очень нужна Ваша помощь. На завтра нужно сделать лабораторные...

Лабораторная работа
Здравствуйте! Условие: Передача данных по линии связи ограничена скоростью X Кб/c. Каждую...

лабораторная работа
1. Как направлена колебательная скорость молекул воздуха в акустической волне по отношению к...

Лабораторная работа 1
Всем привет) Ребята, помогите пожалуйста написать 1. (1 балл) Вычислите по известным формулам. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.