Книга: Этюды для программистов
12. В духе добрососедства, или Домашняя бухгалтерия
12.
В духе добрососедства,
или Домашняя бухгалтерия
Кооперативы — довольно характерное явление в студенческой жизни. Иногда несколько студентов просто вместе платят за квартиру; порой они связаны друг с другом тесными и официальными общинными узами. Однако в любом случае им нужно вести и оплачивать счета. Немало общин распалось из-за денег, и, хотя более глубоких проблем ЭВМ решить не могут, честно вести расчеты они в состоянии.
Как правило, счета присылают в конце месяца, как раз после самой крупной траты — внесения платы за квартиру. В течение месяца каждый член группы платит за все из своего кармана. Пошел в магазин — плати за продукты, открыл дверь — плати разносчику газет, сел за руль — плати за бензин. При удачном стечении обстоятельств большинство членов группы заплатит примерно свою долю, но уж, конечно, точного соответствия не получится никогда.
Если расходы распределяются не поровну, расчет не сводится к простому делению. Обычно кто-нибудь не прочь платить побольше, но иметь еще одну комнату; тот, кто выходные проводит у родителей, платит за еду несколько меньше других и т. п. И разумеется, каждый может потратить деньги по своему усмотрению, например на междугородный телефонный разговор или пиво, что не будет фиксироваться в ежемесячном групповом расчете. Чтобы учесть отмеченные нами и подобные им обстоятельства, нужна устоявшаяся бухгалтерская система.
Тема. Напишите программу, обеспечивающую небольшую общину постатейно расписанными счетами. Исходные данные подразделяются на четыре части. Первая часть должна содержать фамилии тех, кто участвует в расходах в текущем месяце. Во второй части перечисляются основные статьи расходов, такие, как питание, квартплата, коммунальные услуги. За каждой статьей должен следовать список членов общины и их доли в общих расходах. Доля может выражаться как в долларах, так и в процентах. Если вся статья распределена явным образом, то остаток делится поровну между остальными членами. Например, если квартплата составляет 200 долл., студент А взялся платить 45 долл., а В — 35%, то на всех остальных членов общины приходятся равные доли от 85 долл.
Элементами третьей части исходных данных должны быть записи об общественно полезных расходах. Запись содержит дату, фамилию члена группы, уплаченную сумму, статью расхода и краткое описание. Четвертая часть содержит сходную информацию, но о расходах на личные нужды. Каждая запись в этой части имеет ту же структуру, что и в части 3, с очевидным дополнением — указывается фамилия человека, на нужды которого истрачены деньги. Исходные данные необходимо проверить на непротиворечивость, обращая особое внимание на даты, размеры платежей, фамилии и статьи расходов.
Выходная информация также должна подразделяться на несколько частей. Во-первых, каждому члену группы нужно предоставить хронологический список всех платежей и приходов в данном месяце. Во-вторых, каждый должен получить такой же список, упорядоченный по статьям и датам. В этом списке необходимо указать долговые обязательства каждого члена по каждой статье и их разложение на пай и приход. Наконец, все должны узнать свое финансовое положение на конец месяца. Должники пусть знают, кому платить, а те, кому задолжали, пусть знают, с кого требовать деньги. Желательно, чтобы программа по возможности минимизировала число таких балансовых действий.
Заключительная часть вывода должна включать хронологический перечень всех расходов на общественные нужды и таблицу (люди/статьи), в которой приведены расходы, приходы, паи и сбалансированные долговые обязательства. Перекрестное суммирование таблицы позволит оценить точность бухгалтерии.
Указания исполнителю. Ничего особо сложного в предложенной задаче нет. Конечно, эффективная программа всегда лучше неэффективной, но в данном случае время счета мало по сравнению с временем ввода/вывода. Основного внимания требуют разнообразный формат исходных данных к элегантная организация проверки данных на непротиворечивость. А в общем это прозаическая программа, как и большинство производственных программ. Дайте «профессиональное» решение.
Инструментовка. Хотя Кобол — лучшее средство, можно использовать почти любой процедурный язык.
Длительность исполнения. Одному исполнителю на 2 недели.
Развитие темы. Существенная особенность коммерчески-ориентированных языков — точные вычисления и отредактированный вывод долларовых величин. При вычислениях с вещественными числами ошибки округления местами могут достигать нескольких центов; перекрестные проверки при этом дадут разные результаты. Уместно написать несложные подпрограммы для операций с числами с фиксированной точкой (но не с целыми числами!). Если вы напишите программу на Фортране, вам придется уяснить, как печатать эти надоедливые плавающие знаки доллара, «хвостовые> указатели кредита и левые нули. Если применяется Кобол или PL/I, таких трудностей не возникает.
- А вы ноктюрн сыграть могли бы? или Предисловие редактора перевода
- Предисловие
- 1. Что бы это значило? или Как читать книгу
- 2. Жизнь диктует свои законы, или Клеточные автоматы и машинная графика
- 3. Папочка, а почему море синее? или Раскрашивание карты методом исчерпывающего поиска
- 4. Печатник-подмастерье, или Автоматическое форматирование текста
- 5 Победителей судят, или Составление и оценка турнира
- 6 Финансовые воротилы, или Управление предприятиями и машинное моделирование
- 7. Крисс-кросс, или Эвристическое составление головоломки
- 8 Тезей, или Автоматическое построение лабиринтов
- 9. Познай самого себя, или Программа, печатающая собственный исходный текст
- 10. Не прячьте ваши денежки, или Расчет дохода от вложенного капитала
- 11. Меньше copy — меньше и вздору, или Избыточность текста и сжатие файла
- 12. В духе добрососедства, или Домашняя бухгалтерия
- 13. Тур до Тьюрингу, или Моделирование машины Тьюринга
- 14. Машинные забавы, или Стратегия компьютера при игре в калах
- 15. Проще простого, или Поиск узоров из простых чисел
- 16. Горючие слезы, или Учет расхода бензина
- 17. Тише едешь — дальше будешь, или Моделирование движения на автостраде
- 18. Читаем, пишем, считаем, или Конструирование интерпретатора форматов
- 19. Пиковое положение, или Статистика пасьянсов
- 20. Квадратный трехчлен, или Пакет Для Алгебраических Вычислений
- 21. Превратное обратное, или Ошибки при работе с плавающей точкой
- 22. ? эр Квадрат, или Арифметические вычисления с высокой точностью
- 23. Великий комбинатор, или Оптимальные стратегии для игры с угадыванием
- 24. Секрет фирмы или Математический подход к раскрытию шифров
- Сноски из книги
- Содержание книги
- Популярные страницы
- Домашняя мастерская: вы всегда на работе
- Помогает или мешает продажам ваша домашняя страница?
- Тело стрекозы Система, которая держит ее в воздухе
- Домашняя группа
- Глава 7. Учет складских операций в программе 1С Бухгалтерия 8.2
- Глава 5 Программа «1С: Бухгалтерия 8.3»
- 1.7.2. Домашняя папка пользователя
- Фото в воздухе
- 12.1. Обмен данными с программой «1С: Бухгалтерия 8.2»
- Проект 4. Домашняя страница
- Припевы в духе «и что?»
- 4.2. Мысленная бухгалтерия: почему мы едим гнилые яблоки?