2016-02-07 3 views
0

У меня есть этот код в настоящий момент, который работает и вычисляет интерес учетной записи в зависимости от установленных условий. Однако мне теперь нужно закодировать функцию с именем CalcInterest(), которая принимает в качестве своего параметр - учетную запись, - и возвращает рассчитанный процент.Использование функции для возврата значения

#include <iostream> 

using namespace std; 

int main() 
{ 

    int AccountNumber[8] = { 1001, 7940, 4382, 2651, 3020, 7168, 6245, 9342 }; 

    float Balance[8] = { 4254.40, 27006.25, 123.50, 85326.92, 657.0, 7423.34, 4.99, 107864.44 }; 

    int DaysSinceDebited[8] = { 20, 35, 2, 14, 5, 360, 1, 45 }; 
    int interest = 0; 

    //add your code here 

    cout << "Account Number\t" << "Balance\t\t" << "Days\t" << "Interest\t" << endl; 


    for (int i = 0; i < 8; i++) 
    { 
     if (Balance[i] > 10000 || DaysSinceDebited[i] > 30) 
      interest = (Balance[i] * 0.06); 
     else 
      interest = (Balance[i] * 0.03); 

     cout << AccountNumber[i] << "\t\t" << Balance[i] << "\t\t" << DaysSinceDebited[i] << "\t" << interest << "\t" << endl; 
    } 

    system("pause"); 
    return 0; 
} 

Вот что я пытался, функция не работает, но нет никаких ошибок

#include <iostream> 

using namespace std; 


float CalcInterest(int AccountNum); 



int main() 

{ 



cout << "Account Number\t" << "Balance\t\t" << "Days\t" << "Interest\t" << endl; 

float CalcInterest(int AccountNum); 

system("pause"); 
return 0; 
}; 



float CalcInterest(int AccountNum) { 

int interest = 0; 
float Balance[8] = { 4254.40, 27006.25, 123.50, 85326.92, 657.0, 7423.34, 4.99, 107864.44 }; 
int DaysSinceDebited[8] = { 20, 35, 2, 14, 5, 360, 1, 45 }; 
int AccountNumber[8] = { 1001, 7940, 4382, 2651, 3020, 7168, 6245, 9342 }; 


for (int i = 0; i < 8; i++) 
{ 
if (Balance[i] > 10000 || DaysSinceDebited[i] > 30) 
return interest = (Balance[i] * 0.06); 
else 
return interest = (Balance[i] * 0.03); 
cout << AccountNumber[i] << "\t\t" << Balance[i] << "\t\t" << DaysSinceDebited[i] << "\t" << interest << "\t" << endl; 
} 





} 
+1

Основываясь на этом, и ваш предыдущий вопрос - http://stackoverflow.com/questions/35249011/for-loop-and-conditional-statement-to-calculate-a-value - мне кажется, что вы пытаетесь реализовать умеренно-сложное приложение (относительно говоря), не имея достаточно изученных основ C++. Хорошо, что вы пытаетесь учиться, но вам нужно вернуться, потратить больше времени на изучение основ C++ и попробовать еще более простые программы, прежде чем пытаться написать код такого рода сложности. Это не очень хороший способ изучить C++. –

+0

«принимает в качестве своего единственного параметра учетную запись» - вы полагаете, что у вас есть тип 'Account'? Функция 'CalcInterest' в настоящее время принимает' int'. Например, предположим, что у вас есть функция: 'float CalcInterest (const Account & account) {...}'? –

+0

@SamVarshavchik это последний вопрос на тестовом тесте (8 частей), поэтому просто пытайтесь составить набор решений для возможных вопросов, это последний. управлял 1-6 сам по себе, просто нужно пару хитов на последних 2 –

ответ

0

Во-первых, серьезная ошибка синтаксиса, возможно, вызваны копирования и вставки кода:

int main() 
{ 
    /* ... */ 
    float CalcInterest(int AccountNumber); 
    /* ... */ 
}; 

Если у вас (1) намеревается позвонить функция CalcInterest(), y НУ написать свое имя, а затем фактические параметры внутри круглых скобок следующим образом:

CalcInterest(5); 

Однако, если вы хотите заявляют функции, синтаксис является правильным самим по себе, но объявлениям функций не принадлежат внутри другой функции (за исключением лямбда, которые полностью определены внутри другого блока кода. Забавно, что это прекрасно компилируется, насколько я понимаю, так: объявить переменную CalcInterest типа float и передать ее конструктору по умолчанию построенный int под названием AccountNumber. Я прав? Используется синтаксис Си ++.

Ваша вторая ошибка заключается в следующем:

float CalcInterest(int AccountNumber) { 
    /* ... */ 
    int AccountNumber[8] = { 1001, 7940, 4382, 2651, 3020, 7168, 6245, 9342 }; 
    if (AccountNumber == 1001 /* ... */) { /* ... */ } 

После тебя (ре) объявить AccountNumber как массив int длины 8, ваш int AccountNumber параметр функции получает слежка, поэтому компилятор считает, что вы хотите сравнить 1001 с массив int AccountNumber[8]. Здесь идет ошибку:

main.cpp: In function 'float CalcInterest(int)': 
main.cpp:21:24: error: declaration of 'int AccountNumber [8]' shadows a parameter 
    int AccountNumber[8] = { 1001, 7940, 4382, 2651, 3020, 7168, 6245, 9342 }; 
         ^
main.cpp:33:30: error: ISO C++ forbids comparison between pointer and integer [-fpermissive] 
     if (AccountNumber == 1001 || AccountNumber == 4382 || AccountNumber == 3020 || AccountNumber == 6245) 
          ^

Вашей третьей ошибку, на этот раз логический, являются возвращается внутри цикла for. подумайте об этом, на самой первой итерации цикла первый return будет запущен, и ничего больше внутри функции не будет запущено! Это то, что вы намереваетесь делать?

Наконец, насколько я понимаю, вы хотите разложить код в цикле for на функцию справа?Может быть сделано так:

#include <iostream> 

using namespace std; 

void CalcInterest(int i); 

int main() 
{ 
    cout << "Account Number\t" << "Balance\t\t" << "Days\t" << "Interest\t" << endl; 
    for (int account = 0; account < 8; account++) { 
     CalcInterest(account); 
    } 
    system("pause"); 
    return 0; 
}; 

void CalcInterest(int i) { 
    static const float Balance[8] = { 4254.40, 27006.25, 123.50, 85326.92, 657.0, 7423.34, 4.99, 107864.44 }; 
    static const int DaysSinceDebited[8] = { 20, 35, 2, 14, 5, 360, 1, 45 }; 
    static const int AccountNumbers[8] = { 1001, 7940, 4382, 2651, 3020, 7168, 6245, 9342 }; 
    int interest = 0; 
    if (AccountNumbers[i] == 1001 || AccountNumbers[i] == 4382 || AccountNumbers[i] == 3020 || AccountNumbers[i] == 6245) 
     interest = (Balance[i] * 0.06); 
    else 
     interest = (Balance[i] * 0.03); 
    cout << AccountNumbers[i] << "\t\t" << Balance[i] << "\t\t" << DaysSinceDebited[i] << "\t" << interest << "\t" << endl; 
} 
+0

Большое спасибо. Я буду изучать эту глубину, спасибо снова. Если вы не возражаете, можете ли вы немного изменить это, чтобы выполнить это условие? Эта функция будет использовать в качестве параметра ONLY для учетной записи и вернуть процент, рассчитанный как показано –

+0

Решает ли ваша проблема, в том смысле, «выполняет ли она то, что вы намеревались сделать»? – iksemyonov

+0

почти, это просто предел для одного параметра, с которым я сейчас борюсь –

0

мой компилятор (GCC 4.9.2) сказали, что ваша функция CalcInterest имеет параметр с именем AccountNumber и в этой функции у вас есть массив с именем AccountNumber, после того как я переименую один, никаких проблем.

0

Номер учетной записи - int, и вы пытаетесь разыменовать функцию как AccountNumber [i]. Вам нужно передать int array или int pointer.

Пример:

float CalcInterest(int *) 

При вызове:

CalcInterest(AccountNumber)