Loading...
BobyTopalova avatar BobyTopalova 26 Точки

задача 4.Печалби от домашното

01. Pointers and References – Homework Exercises
Write C++ code for solving the tasks on the following pages.
Code should compile under the C++03 or the C++11 standard.
Submit your solutions here: https://judge.softuni.bg/Contests/1150/01-Pointers-and-References-Homework
Any code files that are part of the task are provided under the folder Skeleton.
Please follow the exact instructions on uploading the solutions for each task.
Task 4 – Profits
You are given program in an ProfitsMain.cpp, as well as a Company.h and ProfitCalculator.h file, that read info about companies – name, id, revenue and costs, followed by info about profit calculations per company – company id followed by a tax percentage – and generates a report with the profit for each company in the input.
The report must contain exactly as many lines as there are companies, and each line should contain the name of the company on that line in the input, followed by a space, a '=', another space, and an integer value representing the profits of the company, e.g. a line of the output for a company called TheCompany with a profit of 42000 should look like this:
TheCompany = 42000
To generate the report, ProfitsMain.cpp uses a function named getProfitReport from a file named ProfitReport.h. The getProfitReport function receives 3 parameters:
A pointer to the first company in an array of companies
A pointer to the last company (inclusive) in an array of companies
An std::map, which maps company ids to ProfitCalculators
The getProfitReport should use the appropriate ProfitCalculator from the map (i.e. the ProfitCalculator in the entry with a key matching the id of the company) to calculate each company’s profit.
The getProfitReport returns a string, containing the report for the provided companies, calculated through the provided ProfitCalculators, as described above.
Your task is to study the code in ProfitsMain.cpp, then create a file called ProfitReport.h (which ProfitsMain.cpp includes) containing the definition of the getProfitReport function, written in such a way that ProfitsMain.cpp compiles successfully and works as described above.

След, много неуспешни опити, моля някой за съвет как да върна с getProfitReport, тази информация, да кажем че оппечатвам името на "компанията и = " в самата функция, как да върна печалбата, за всяка компания? Референция няма да ми помогне.

Разбира се моят ProfitReport.h, не е верен, много се помъчих, моля знаещите за подсказка! Аз не мога да се справя, без помощ!

 

ProfitReport.h - https://pastebin.com/5X18x5ZQ

Company.h    -  https://pastebin.com/sg9znX3U

ProfitsMain.cpp - https://pastebin.com/x3JhFfig

ProfitCalculator.h  - https://pastebin.com/cVb1Gfb7

input
acme 424242420 : 43000 1000
softuni_foundation 20140414 : 0 0
itjoro 878968302 : 100 25
end
878968302 0
424242420 10
20140414 30
end 

output

   acme = 37800
softuni_foundation = 0
itjoro = 75    

 

Тагове:
0
C++ Programming 28/01/2019 10:26:48
MartinBG avatar MartinBG 4803 Точки
Best Answer

Трябва да върнеш стринг, който съдържа репортите за всички компании, които попадат в зададения диапазон, а ти печаташ името на първата директно на конзолаа и после връщаш като стринг репорта за нея, без да обработиш останалите компании. Най добре запиши данните за компаниите в std::ostringstream, който после да върнеш като резултат от функцията.

При обхождането на рейнджа трябва да включиш всички компании от fromInclusive до toInclusive включително.  Може да го реализираш както с for, така и с while цикъл, но гледай да не пропуснеш някоя компания.

2
kolioi avatar kolioi 641 Точки

Като гледам кода в ProfitReport.h общо взето си го направила, само че вместо return на 15-ти ред трябва да изчислиш profit-а и да го добавиш към резултатния стринг. След това продължаваш цикъла със следващата компания.

 

Използвам темата за да задам следния въпрос (с повишена трудност) smiley

Ако направим profitCalculatorByCompany константен параметър (const) във функцията getProfitReport, защо не можем да достъпим калкулатора на фирмата по индекс (id-то на фирмата)?

std::string getProfitReport( Company* fromInclusive, Company* toInclusive,
	const std::map<int, ProfitCalculator>& profitCalculatorsByCompany )
{
    .....
	auto calc = profitCalculatorsByCompany[pCompany->getId()];  // това не се компилира
    .....
}

(pCompany е пойнтер към Company).

2
MartinBG avatar MartinBG 4803 Точки

@kolioi - Този въпрос към всички ли е, или само към колегите, които карат тази инстанция на курса? :)

2
kolioi avatar kolioi 641 Точки

Това е задачка-закачка :) Въпроса е към всички. Аз знам отговора, но нека колегите да помислят малко :)

1
kolioi avatar kolioi 641 Точки

ProfitCalculator само прочита taxPercentage (на ред 34 в main()). За да изчислиш profit-а трябва да извикаш метода calculateProfit() за съответната компания. Мап-а просто задава връзката между дадена компания и нейния процент данък (taxPercentage).

1
MartinBG avatar MartinBG 4803 Точки

@kolioi Той въпросът е добър, но явно колегите не са внимавали много в часа по STL, затова ще им дам hint smiley

1
BobyTopalova avatar BobyTopalova 26 Точки

Отговора на kolioi e най-добър - ProfitCalculator само прочита taxPercentage (на ред 34 в main()). За да изчислиш profit-а трябва да извикаш метода calculateProfit() за съответната компания. Мап-а просто задава връзката между дадена компания и нейния процент данък (taxPercentage).

0
01/02/2019 17:21:05
BobyTopalova avatar BobyTopalova 26 Точки

Да, аз си мислех за ostringstream, но си мислех, че функцията трябва да връща стрийм, а не стринг. А колкото до рейнджа toInclusive +1. Пусках няколко пъти файла в judge, и успях на изведа имената на " компаниите" интервал"="интервал обаче без печалбите.

1
BobyTopalova avatar BobyTopalova 26 Точки

Нали ProfitCalculator.h всъщност вече е изчислил печалбата, как да стигна до тази печалба, този мап е неизползваем. Инстанция на класа?

return stream >> p.taxPercentage; ето това     ProfitCalculator& p; това не е ли псевдоним?

0
28/01/2019 10:23:21
BobyTopalova avatar BobyTopalova 26 Точки

https://pastebin.com/i8jv3JhU

до value, на мапа не мога да достигна

cout<< ми изписва грешка

иначе found->first мога да го отпечам.

0
28/01/2019 18:32:15
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.