Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
laby.doc
Скачиваний:
2
Добавлен:
26.11.2018
Размер:
598.53 Кб
Скачать
    1. Работа с файлами и алгоритмы сортировки Постановка задачи

Основная задача.

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

Б. Закончить исполнение.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]