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

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

05.12.2008, 18:05. Просмотров 6019. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.12.2008, 18:05
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Лабораторная работа №5. Работа с файлами и алгоритмы сортировки (Delphi):

Лабораторная работа
Добрый день всем) обращаюсь к вас с большой надеждой что вы мне поможете с...

лабораторная работа.
Дано натуральное число n(n<=100). Сколько цифр в числе n....

Лабораторная работа.
Изучаю Delphi,с простейшим заданием не смог справиться. Готовая лабораторная...

Лабораторная работа
Всем Здравствуйте! само задание находится в документе

Лабораторная работа
2.3. Повороты. 2.3.1 Вывести с помощью процедур МоveTo и LineTo...

Лабораторная работа №8
Практическая часть. Ход работы. 1. Создать новый проект. 2. Для окна проекта...

3
volan4ikthebest
1 / 1 / 0
Регистрация: 05.12.2008
Сообщений: 14
05.12.2008, 19:10 #2
Обязательно файл должен быть текстовым???
0
uhbif
0 / 0 / 0
Регистрация: 03.11.2008
Сообщений: 20
05.12.2008, 19:39  [ТС] #3
volan4ikthebest, а в файл как я должен написать текст
0
volan4ikthebest
1 / 1 / 0
Регистрация: 05.12.2008
Сообщений: 14
05.12.2008, 19:55 #4
Ставиш обьект - StringGrid и с него по ячейкам считываешь - он предназначен для работы с таблицами.
Закинуть процедуры???
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2008, 19:55
Привет! Вот еще темы с решениями:

Лабораторная работа: Шифр Хилла
Составить программу с графическим интерфейсом, которая реализует Шифр Хилла

лабораторная работа 2 курс , delphi
Определить класс для представления вектора на плоскости, содержащий в качестве...

Лабораторная работа, использование множеств
Нужно составить программу, считывающую строки и накапливающую количество...

Лабораторная работа: многомерные массивы
Даны два многочлена: A(x)= a0+a1x+a2x^2+...anx^n и...


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

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

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