Листинг 1.5. Функция сравнения денежных сумм
int CompareMoney(const TMoney &a, const TMoney &b)
{ int sign = 0; // если равны
if(a.Summa < b.Summa) sign = -1; // первый меньше
else if (a.Summa > b.Summa) sign =1; // первый больше
return sign;
}
И наконец, наиболее интересная для нас функция — функция вывода на экран1, текст которой приведен в листинге 1.6.
Листинг 1.6. Функция вывода на экран
typedef unsigned int uint; // для сокращения записи
void DisplayMoney(const TMoney &a)
{ string s = ""; // строка результата
string Digits = "0123456789";
uint digit; // очередная цифра числа
bool negative = (a.Summa < 0); // выясняем знак числа
long double t = fabs(a.Summa); // абсолютная величина суммы
uint kop = fmod(t, 100); // получаем копейки
t = floor(t/=100); - // отсекаем копейки
if (t > 0) * // если есть рубли
{ while (t>=l) // формируем рубли
{ digit = fmod(t, 10); // очередная цифра
t/=10; // отсекли цифру от суммы
1 Для работы со строками мы будем пользоваться типом string [1-21], который реализован в составе стандартной библиотеки С++ (см. приложение).
продолжение
Листинг 1.6 (продолжение)
s=Digits[digit]+s;
}
// прицепили символ цифры к строке
else s +="0"; s+=" руб. ";
// если рублей нет
// формируем копейки
s+=Digits[kop/19]; s+=" коп. ";
if (negative) s = '-'+s; cout << s << endl;
s+=Digits[kop%10];
|