- •Программирование на языке Паскаль
- •Содержание
- •Оформление лабораторных работ
- •Линейный алгоритм
- •Экранные меню и циклы Постановка задачи
- •Математическая модель
- •Описание алгоритма
- •Текст программы
- •Процедуры и функции Постановка задачи
- •Математическая модель
- •Описание алгоритма
- •Текст программы
- •Работа с файлами и алгоритмы сортировки Постановка задачи
- •| Фамилия |Дни| Оклад | Зарплата |
- •|Петров | 15| 6300.00| 3937.50| |Иванов | 24| 5600.00| 5600.00|
- •|Итого | 23687.50|
- •Математическая модель
- •Описание алгоритма
- •Текст программы
- •Inc(Cmp); {Подсчет количества сравнений}
- •Inc(Cmp); {Подсчет количества сравнений}
- •Визуальное программирование Постановка задачи
- •Математическая модель
- •Библиографический список
Работа с файлами и алгоритмы сортировки Постановка задачи
Основная задача.
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".
Б. Закончить исполнение.