Напишите программу, которая циклически будет

Напишите программу, которая циклически будет запрашивать ввод пользователем двух денежных сумм, выраженных в фунтах, шиллингах и пенсах (см. упражнения предыдущей ЛР). Программа должна складывать введенные суммы и выводить на экран результат, также выраженный в фунтах, шиллингах и пенсах. После каждой итерации программа должна спрашивать пользователя, желает ли он продолжать работу программы. При этом рекомендуется использовать цикл do. Естественной формой взаимодействия программы с пользователем была бы следующая: Введите первую сумму £5 10 6 Введите вторую сумму £3 2 6 Всего £8 13 0 Продолжить (у/n)? Для того чтобы сложить две суммы, вам необходимо учесть заем одного шиллинга в том случае, если число пенсов окажется больше 11, и одного фунта, если число шиллингов окажется больше 19.
Дополнительные параметры: codeFlowType: codeWrite codeFlowLang: C++
Создано: 12.04.2025 18:38

Напишите программу, которая циклически будет запрашивать ввод пользователем двух денежных сумм, выраженных в фунтах, шиллингах и пенсах (см. упражнения предыдущей ЛР). Программа должна складывать введенные суммы и выводить на экран результат, также выраженный в фунтах, шиллингах и пенсах. После каждой итерации программа должна спрашивать пользователя, желает ли он продолжать работу программы. При этом рекомендуется использовать цикл 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 позволяет пользователю вводить новые суммы и получать результат, пока он желает продолжать.