Передача массива объектов, количества объектов и требуемого термина функции

#c #class #function #arrays

#c #класс #функция #массивы

Вопрос:

В моей книге по программированию я столкнулся с некоторыми проблемами при выполнении упражнения, связанного с банковскими счетами. Вопрос задает:

Создайте функцию main(), которая объявляет массив из 10 объектов BankAccount. После ввода первого объекта BankAccount спросите пользователя, хочет ли он продолжить. Запрашивать у пользователя значения BankAccount до тех пор, пока пользователь не захочет выйти или не введет 10 объектов BankAccount, в зависимости от того, что наступит раньше. Для каждого введенного банковского счета отобразите сведения о банковском счете. Затем запрашивает у пользователя термин со значением от 1 до 40 включительно. Продолжайте запрашивать пользователя, пока не будет введено допустимое значение. Затем передайте массив объектов BankAccount, количество допустимых объектов в массиве и требуемый срок в функцию, которая вычисляет и отображает значения каждого из банковских счетов по истечении заданного количества лет по стандартной процентной ставке.

Для выполнения этой задачи я должен использовать 3 общедоступные функции. Я начинаю сталкиваться с проблемами только при попытке computeInterest(). Если я попытаюсь передать термин и количество в функцию и настроить его в 2 цикла for, я получу только числа и балансы для одного объекта. Я предполагаю, что я спрашиваю: как мне заставить программу вызывать computeInterest и выполнять для каждого объекта BankAccount?

На данный момент мой код настроен таким образом, что он будет отлично компилироваться и выполняться, однако вопрос требует отправки термина и количества в функцию, пока я только отправляю термин.

Я не уверен, отправляю ли я массив объектов в функцию? Что может быть причиной проблемы. Это мучает мой мозг уже несколько дней 🙁. Любая помощь / указатели высоко ценятся!

 #include<iostream>
#include<string>
using namespace std;

// Declaration Section

class BankAccount
{
private:
    int accNum;
    double accBal;
    const static double intRate;

public:
    void enterAccountData(int, double);
    void computeInterest(int);
    void displayAccount();
};

// Implementation Section

const double BankAccount::intRate = 0.03;

void BankAccount::enterAccountData(int num, double bal)
{
    const int MIN_ACC = 1000, MAX_ACC = 9999, MIN_BAL = 0,
    MAX_BAL = 100000;

    cout << "Enter account number: ";
    cin >> num;

    while (num < MIN_ACC || num > MAX_ACC)
    {
        cout << "ERROR: Account number must be between " << MIN_ACC <<
        " - " << MAX_ACC << ".n" << "Enter account number: ";
        cin >> num;
    }

    cout << "Enter account balance: $";
    cin >> bal;

    while (bal < MIN_BAL || bal > MAX_BAL)
    {
        cout << "ERROR: Account balance must be positive and less than $" <<
        MAX_BAL << ".n" << "Enter account balance: $";
        cin >> bal;
    }

    accNum = num;
    accBal = bal;
}

void BankAccount::computeInterest(int YR)
{
    int x;
    double interest;

    for (x = 0; x < YR;   x)
    {
        interest = accBal * intRate;
        accBal = accBal   interest;

        cout << "Account# " << accNum <<
            ", Balance: $" << accBal << ", Interest: " <<
            intRate << endl;
    }
    cout << endl;
}

void BankAccount::displayAccount()
{
    cout<<"Account: " << accNum <<", Balance: $" << accBal <<
    ", Interest: " << intRate << endl << endl;
}

int main()
{
    const int END = -999, MAX_ACCOUNTS = 10, CONTINUE = 1, MIN_TERM = 1,
    MAX_TERM = 40;
    int i, x, count = 0, num = 0, term = 0;
    double bal = 0;

    BankAccount accounts[MAX_ACCOUNTS];

    do
    {
        count  ;
        accounts[count - 1].enterAccountData(num, bal);
        accounts[count - 1].displayAccount();
        cout << "Enter " << CONTINUE << " to proceed, or " << END << " to stop: ";
        cin >> i;

        if (i == END || count == MAX_ACCOUNTS)
        {
            cout << "Enter the term of the accounts (" << MIN_TERM <<
                "-" << MAX_TERM << "): ";
            cin >> term;

            while (term < MIN_TERM || term > MAX_TERM)
            {
                cout << "ERROR: Term must be between " << MIN_TERM <<
                    " - " << MAX_TERM << " inclusive.n" <<
                    "Enter term of the accounts (" << MIN_TERM <<
                    "-" << MAX_TERM << "): ";
                cin >> term;
            }

            for (x = 0; x < count;   x)
                accounts[x].computeInterest(term);
        }
    } while (i != END amp;amp; count != MAX_ACCOUNTS);
}
  

Комментарии:

1. Вы уже знаете, как выполнять цикл по массиву, поэтому я не уверен, что вас смущает. Выполните цикл по массиву и вызовите computeInterest для каждого.

2. 1 за четкое описание проблемы и показ кода, который вы написали на данный момент.

3. Кроме того, формула для вычисления сложных процентов без цикла такова accBal = accBal * std::pow(1 intRate, YR);

4. @Rob Спасибо за формулу, это просто работает с cmath, верно?

5. Да, std::pow определено в <cmath> , поэтому все, что вам нужно для этой формулировки, это #include <cmath> .

Ответ №1:

Вы уже делаете это в for (x = 0; x < count; x)
accounts[x].computeInterest(term);

Если действительно необходимо, вы можете переместить этот конкретный фрагмент кода в отдельную функцию, которая принимает 3 параметра: массив accounts , count и term .

Способ настройки класса BankAccount заключается в том, что каждый объект вычисляет свой собственный процент. Поскольку у вас есть несколько таких объектов, вы можете попросить каждый из них вычислить свой собственный интерес.

Надеюсь, это поможет!Дайте мне знать, если возникнут какие-либо другие вопросы 🙂

Комментарии:

1. Мне удалось это получить! Большое вам спасибо. Я не думал, что передаю массив функции!