codeFlowType:
codeWrite
codeFlowLang:
C++
Напишите программу, которая циклически будет запрашивать ввод пользователем двух денежных сумм, выраженных в фунтах, шиллингах и пенсах (см. упражнения предыдущей ЛР). Программа должна складывать введенные суммы и выводить на экран результат, также выраженный в фунтах, шиллингах и пенсах. После каждой итерации программа должна спрашивать пользователя, желает ли он продолжать работу программы. При этом рекомендуется использовать цикл do. Естественной формой взаимодействия программы с пользователем была бы следующая:
Введите первую сумму £5 10 6
Введите вторую сумму £3 2 6
Всего £8 13 0
Продолжить (у/n)?
Для того чтобы сложить две суммы, вам необходимо учесть заем одного шиллинга в том случае, если число пенсов окажется больше 11, и одного фунта, если число шиллингов окажется больше 19.
Вот пример программы на языке C++, которая выполняет задачи, указанные в вашем запросе:
#include <iostream>
using namespace std;
struct Money {
int pounds;
int shillings;
int pence;
};
// Функция для нормализации денежной суммы
void normalize(Money &m) {
if (m.pence >= 12) {
m.shillings += m.pence / 12;
m.pence = m.pence % 12;
}
if (m.shillings >= 20) {
m.pounds += m.shillings / 20;
m.shillings = m.shillings % 20;
}
}
// Функция для сложения двух денежных сумм
Money addMoney(const Money &m1, const Money &m2) {
Money result;
result.pounds = m1.pounds + m2.pounds;
result.shillings = m1.shillings + m2.shillings;
result.pence = m1.pence + m2.pence;
normalize(result); // Нормализуем результат
return result;
}
int main() {
char choice;
do {
Money firstSum, secondSum;
// Запрашиваем первую сумму
cout << "Введите первую сумму (фунты шиллинги пенсы): ";
cin >> firstSum.pounds >> firstSum.shillings >> firstSum.pence;
// Запрашиваем вторую сумму
cout << "Введите вторую сумму (фунты шиллинги пенсы): ";
cin >> secondSum.pounds >> secondSum.shillings >> secondSum.pence;
// Складываем суммы
Money total = addMoney(firstSum, secondSum);
// Выводим результат
cout << "Всего: £" << total.pounds << " " << total.shillings << " " << total.pence << endl;
// Спрашиваем пользователя, хочет ли он продолжать
cout << "Продолжить (у/n)? ";
cin >> choice;
} while (choice == 'у' || choice == 'У');
return 0;
}
Money
, которая содержит три поля: pounds
, shillings
и pence
.normalize
отвечает за нормализацию значений пенсов и шиллингов.addMoney
принимает две суммы и возвращает их сумму, нормально оформленную.do...while
позволяет пользователю вводить новые суммы и получать результат, пока он желает продолжать.