0 / 0 / 0
Регистрация: 03.11.2008
Сообщений: 20
|
|
1 | |
Лабораторная работа №5. Работа с файлами и алгоритмы сортировки05.12.2008, 18:05. Показов 14379. Ответов 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
|
|
05.12.2008, 18:05 | |
Ответы с готовыми решениями:
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
|
05.12.2008, 19:55 | |
05.12.2008, 19:55 | |
Помогаю со студенческими работами здесь
4
Лабораторная работа по С Лабораторная работа лабораторная работа Лабораторная работа 1 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |