Loading...
Petarat avatar Petarat 1 Точки

Помощ за домашно Compound interest (?)

Предварително искам да се извиня ако темата се дублира. Не успях да открия поле за търсене във форума.

Питането ми е за "Compound interest" в домашно #6 от курса "Basic programming - C#".

Не успях да разбера как се формира пълната лихва (FV - Future Value) на заем от приятел. Защото във формулата 'FV = PV * (1 + i)**n', както е дадена, присъства n в степенния показател, а в примерът за приятелския заем този показател отсъства. Четох и в Wikipedia, но не открих нищо за приятелски заем. Не съм икономист и се интересувам, защото повечето фирми в България проектират счетоводен софтуер.

На практика "приятелите" в един прекрасен момент могат да се окажат и гадняри.

1. Кое определя отсъствието на степенния показател в преятелския заем?

2. Защо не е дадено в условието? По подразбиране ли е?

3. Има ли наистна в Икономиката формула без степенен показател или в случая е по осмотрение на програмиста?

Благодаря.

1
Programming Basics
pmpeev+deleted! avatar pmpeev+deleted! 22 Точки

Здравейте, и аз имам въпрос относно тази задача, но вместо да създавам нова тема, ще го задам тук. Успях да я реша по два начина, но второто ми решение не се приема от judge системата за вярно, защото има проблем със закръглянето след десетичния знак.

Накратко - използвам Math.Round() за закръгляне до 2 знака, но когато резултатът от изпълнението на тази функция завършва на 0, тя не се изписва. Например при краен резултат 1234.50 на конзолата се изписва 1234.5 и от там judge-а дава грешка, защото очаква 1234.50.

Въпросът ми е може ли това да се попарави по някакъв начин, по възможност без превръщане на резултата в string и слайсване.

Ето и решението ми: http://pastebin.com/uqjLZSBv

P.S. Ако някой се чуди защо използвам for цикъл за повдигане на степен, вместо Math.Pow() - причината е, че Math.Pow() не работи с decimal.

0
gabi.ivanova avatar gabi.ivanova 370 Точки

Може да използваш placeholder и да го форматираш
Console.WriteLine("{0:0.00}", var);     Console.WriteLine("{0:F2}", var);

на нулева позиция поставя променливата var във формат 0.00, ако няма цифра в промелнивата, печата 0 на конзолата. Ако имаш 254.8 ще изпечата 254.80, с F2 е същото :) може да прочетеш в книгата за форматиране на стрингове

1
pmpeev+deleted! avatar pmpeev+deleted! 22 Точки

Благодаря за отговора, но и така не сработва - продължавам да получавам грешки от рода на:

Expected output: 2255.00 Friend

Your output:         2255.0 Friend

 

0
RoYaL avatar RoYaL Trainer 6849 Точки

Не ти вярвам :) Дай да видим кода. Ето семпли тестове:

1.

Console.WriteLine("{0:F3}", Math.Round(0M, 3));

Принтира: 0.000

2.

Console.WriteLine("{0:F3}", Math.Round(0.5, 3));

Принтира: 0.500

3.

Console.WriteLine("{0:F3}", Math.Round(0.53456, 3));

Принтира: 0.535

P.S.: Math.Round-а в случая е излишен.

0
04/02/2016 14:35:14
pmpeev+deleted! avatar pmpeev+deleted! 22 Точки

Помъчиx се още малко, но получавам само 25/100 точки. Този път грешките са няколко Rutime Error и 2 Incorrect Result.

Ето кода:

http://pastebin.com/77ncKD1g

Ще продължа да търся грешката си, а междувременно ще се радвам и на чужда помощ.

 

 

0
gabi.ivanova avatar gabi.ivanova 370 Точки

проблемът е в начина, по който изчисляваш разходите за банката. степента се изчислява 2*2 -> 4*2 -> 8*2..., а в цикъла на теб ти се получава 2*2 -> 4*4 -> 16*16.... тоест умножава се по себе си, а не по постоянна стойност, трябва една временна променлива, която да използваш за степенуване и си готов 
 

decimal bank_partial_interest = 1m + i;

decimal temp = 1m + i;
for (uint j = 1; j < n; j++)
{
    bank_partial_interest = bank_partial_interest * temp;
}

това е. Дори не ти трябва иф конструкция, ако стойността е 1 в началото, просто не влиза в цикъла да степенува
Така изкарва 100 в системата

1
04/02/2016 16:23:34
pmpeev+deleted! avatar pmpeev+deleted! 22 Точки

Благодаря ти, че забеляза грешката ми при степенуването. Иначе аз стигнах и до друго решение с функцията .ToString(), но не мисля, че е много елегантно. Който проявява интерес, може да го види тук: http://pastebin.com/7tgNFFHm

0
gabi.ivanova avatar gabi.ivanova 370 Точки

друг начин да го направиш 
 

decimal bankLoan = priseTV * (decimal)Math.Pow((1.0 + Convert.ToDouble(bankInterest)), termBank);

конкретно за тази задача работи ок

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