Софтуерно Инженерство
Loading...
+ Нов въпрос
slavib avatar slavib 0 Точки

Защо се променя стойността на acme от 4 та задача ?

Това е най - странният резултат който получавам - единствено първата компаня има грешен резултат за другит ерезултата е точен . Как е възможно ?

std::string getProfitReport(const Company* firstCompany,const Company* lastcompany, std::map<int,ProfitCalculator> profitcalc){

    std::map<int,ProfitCalculator>::iterator it;
    std::string result;
    for (it = profitcalc.begin(); it != profitcalc.end(); it++)
    {
        if (firstCompany->getId()>lastcompany->getId()){
            break;
        }else {
             result.append(firstCompany->getName() + " = " + std::to_string(it->second.calculateProfit(*firstCompany))+"\n");
            *firstCompany++;
        }
    }
    return result;
}
Тагове:
0
C++ Advanced
galin_kostadinov avatar galin_kostadinov 136 Точки

Привет!

От условието на задачата се вижда, че компаните с техните печалчи са принтирани в реда на получаване на компаниите(преди първия еnd).

Във втората част от задачата получаваш tax percentage, като тук се вижда, че компаните, редовете с id <-> tax percentage са в друг ред спрямо първата част на входа. Ти ги запазваш в map, което означава, че се подреждат спряма ключа на мапа, т.е. по id в нарастващ ред.

В последствие итерирараш спряма подредбата в map, т.е. не вземаш таксата(процента) на съответната компания, а тази която е поредна в map:

std::map<int,ProfitCalculator>::iterator it;
for (it = profitcalc.begin(); it != profitcalc.end(); it++){}

Два от отговорите ти пасват просто случайно.

Пробвай да итерираш спрямо подредбата на компаните:

const Company* currCompany = firstCompany; currCompan++;

Вземаш id-то на съответната компания:

int id = currCompany->getId();

int result = profitCalc.find(id)->second.calculateProfit(*currCompany);

Поздрави!

 

 

 

 

1
03/12/2019 13:47:39