yull, я что-то не пойму это 2-е задачи или одна? Первый пункт:
| Код | #include <iostream> #include <iomanip>
using namespace std;
// Класс "пачка денег" // По сути это примитивнейший контейнер хранящий пару значений class TPack { public: // Значение пачки конкретного достоинства struct TValue { unsigned nominal; // Номинал unsigned count; // Количество купюр TValue(): nominal(0), count(0) { ; } }; protected: TValue* val; // Сам контейнер unsigned size; // Его размер public: // Пользователь задаёт рамер контейнера TPack(unsigned theSize): size(theSize) { val = new TValue[theSize]; } // Конструктор копирования, т.к. мы имеем дело // с динамическим массивом TPack(const TPack& thePack) { size = thePack.size; val = new TValue[size]; for (unsigned i = 0; i < size; ++i) { val[i] = thePack.val[i]; } } ~TPack() { delete [] val; } // Перегружаем оператор индексирования для удобства обращения TValue& operator [] (unsigned theIndex) { // Для того чтобы обезопасить контейнер от ошибок неверного индексирования // В том случае если такой индекс не существует, то отдаём пользователю // статичную и единственную область shared на растерзание. static TValue shared; if (theIndex < size) { return val[theIndex]; } return shared; } // Думаю комментарии излишни friend ostream& operator << (ostream& os, TPack& thePack) { for (unsigned i = 0; i < thePack.size; ++i) { os << setw(6) << thePack[i].nominal << " = " << setw(3) << thePack[i].count << endl; } return os; } };
// Класс "банкомат" class TATM { protected: enum {COUNT = 5}; // Количество номинальных единиц static const unsigned CNominal[COUNT]; // Номиналы банкнот (описаны ниже) unsigned money; // Деньги которые нужно распределить public: TATM(unsigned theMoney = 0): money(theMoney) { ; } void SetMoney(unsigned theMoney) { money = theMoney; } TPack GetMoney() { TPack pack(COUNT); // Распределяем сумму по номиналам for (unsigned i = 0; i < COUNT; ++i) { pack[i].nominal = CNominal[i]; pack[i].count = money / CNominal[i]; money = money % CNominal[i]; }
return pack; } };
const unsigned TATM::CNominal[] = {50000, 20000, 10000, 5000, 1000};
int main() { // Ложем в банкомат деньги TATM atm(138000);
// Получаем пачку денег :-) TPack pack = atm.GetMoney();
// Смотрим чего и сколько cout << pack; return 0; }
|
http://codepad.org/GcFS9l7I |