Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
laby.doc
Скачиваний:
162
Добавлен:
22.02.2015
Размер:
565.25 Кб
Скачать
    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".

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

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