Loading...
Vardanss avatar Vardanss 0 Точки

Nested Conditional Statements - Exercises задача 4 Нов дом

Здравейте, някой да има идея как бих могла да си поправя грешката при последните два вида цветя(Narcissus & Gladiolus)?

При вход Narcissus  119  360  ми изписва "Hey, you have a great garden with 119 Narcissus and -50.55 leva left." , а трябва да изписва "Not enough money, you need 50.55 leva more.".

Ето кода: https://pastebin.com/HnnPC383

Това е условието на задачата:

1.Нов дом

Марин и Нели си купуват къща не далеч от София. Нели толкова много обича цветята, че Ви убеждава да напишете програма която да изчисли колко  ще им струва, да си засадят определен брой цветя и дали наличния бюджет ще им е достатъчен. Различните цветя са с различни цени.

цвете

Роза

Далия

Лале

Нарцис

Гладиола

Цена на брой в лева

5

3.80

2.80

3

2.50

Съществуват следните отстъпки:

  • Ако Нели купи повече от 80 Рози - 10% отстъпка от крайната цена
  • Ако Нели купи повече от 90  Далии - 15% отстъпка от крайната цена
  • Ако Нели купи повече от 80 Лалета - 15% отстъпка от крайната цена
  • Ако Нели купи по-малко от 120 Нарциса - цената се оскъпява с 15%
  • Ако Нели Купи по-малко от 80 Гладиоли - цената се оскъпява с 20%

От конзолата се четат 3 реда:

  • Вид цветя - текст с възможности - "Roses", "Dahlias", "Tulips", "Narcissus", "Gladiolus"
  • Брой цветя - цяло число в интервала [10…1000]
  • Бюджет - цяло число в интервала [50…2500]

Да се отпечата на конзолата на един ред:

  • Ако бюджета им е достатъчен - "Hey, you have a great garden with {броя цвета} {вид цветя} and {останалата сума} leva left."
  • Ако бюджета им е НЕ достатъчен - "Not enough money, you need {нужната сума} leva more."

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

Примерен вход и изход

Вход

Изход

Обяснения

Roses

55

250

Not enough money, you need 25.00 leva more.

Нели иска 55 броя Рози. Цената на една роза е 5лв., следователно за 55 броя Нели ще трябва да плати: 55 * 5 = 275.

Тя обаче разполага с 250 лв. бюджет.
Понеже 275 > 250 , то не и достигат 25 лв.

Вход

Изход

Вход

Изход

Tulips

88

260

Hey, you have a great garden with 88 Tulips and 50.56 leva left.

Narcissus

119

360

Not enough money, you need 50.55 leva more.

            

Тагове:
0
Programming Basics
Quake3 avatar Quake3 546 Точки

Здравей,

 

  • Ако Нели купи по-малко от 120 Нарциса - цената се оскъпява с 15%

В кода, ако totalPrice > budget, проверката за numFlowers  < 120 няма да се изпълни.

if (totalPrice <= budget && numFlowers < 120)

Няма ли да е по-добре първо да провериш броя на цветята и после да гледаш бюджета?

 

0
Vardanss avatar Vardanss 0 Точки

Пробвах и това, но явно не го правя правилно и не ми го чете. Просто не ми хрумва как може да се подреди. Промених го за Нарцисите и сработи, по същата логика го промених за Гладиолите и не влиза в нито една проверка. Ще съм благодарна, ако някой ми обясни какво пропускам. Ето го с промяната и пак не работи добре:

else if (typeOfFlowers == "Narcissus")    //narcissus < 120 --> price * 15%
            {
                totalPrice = priceForOneNarcissus * numFlowers;
                if (numFlowers < 120)
                {
                    double riseInPrice = totalPrice * 1.15;
                    if (budget >= riseInPrice)
                    {
                        double leftMoney = budget - riseInPrice;
                        Console.WriteLine($"Hey, you have a great garden with {numFlowers} {typeOfFlowers} and {leftMoney:f2} leva left.");
                    }
                    else if (totalPrice < budget)
                    {
                        double neededMoney = Math.Abs(totalPrice - budget);
                        Console.WriteLine($"Not enough money, you need {neededMoney:f2} leva more.");
                    }
                }
                else
                {
                    double neededMoney = totalPrice - budget;
                    Console.WriteLine($"Not enough money, you need {neededMoney:f2} leva more.");
                }
            }
            else if (typeOfFlowers == "Gladiolus")    //gladiolus < 80 --> price * 20%
            {
                totalPrice = priceForOneGladiolus * numFlowers;
                if (numFlowers < 80)
                {
                    double riseInPrice = totalPrice * 1.2;
                    if (budget >= riseInPrice)
                    {
                        double leftMoney = budget - riseInPrice;
                        Console.WriteLine($"Hey, you have a great garden with {numFlowers} {typeOfFlowers} and {leftMoney:f2} leva left.");
                    }
                    else if (totalPrice < budget)
                    {
                        double neededMoney = Math.Abs(totalPrice - budget);
                        Console.WriteLine($"Not enough money, you need {neededMoney:f2} leva more.");
                    }
                }
                else if (numFlowers > 80)
                {
                    if (budget >= totalPrice)
                        totalPrice = budget - totalPrice;
                    Console.WriteLine($"Hey, you have a great garden with {numFlowers} {typeOfFlowers} and {totalPrice:f2} leva left.");
                        
                }
                else
                {
                    double neededMoney = totalPrice - budget;
                    Console.WriteLine($"Not enough money, you need {neededMoney:f2} leva more.");
                }
            }

0
Quake3 avatar Quake3 546 Точки

Здравей,

double neededMoney = Math.Abs(totalPrice - budget);

Ти намираш riseInPrice по-горе, но употребяваш totalPrice. Не трябва ли вместо totalPrice, да използваш riseInPrice?

Съвсем същото трябва да е и за гладиолите. Май няма нужда от if, else if, else.
If ... < ... else ... трябва да е достатъчно. Ако нарцисите дават очакваните резултати, копирай ги и смени каквото е необходимо, за да станат на гладиоли :)

Нещо подобно няма ли да свърши работа:

                else if (typeOfFlowers == "Narcissus")    //narcissus < 120 --> price * 15%
                {
                    totalPrice = priceForOneNarcissus * numFlowers;
                    if (numFlowers < 120)
                    {
                        totalPrice *= 1.15;
                    }
                    double neededMoney = budget - totalPrice;
                    if (neededMoney >= 0)
                    {
                        Console.WriteLine($"Hey, you have a great garden with {numFlowers} {typeOfFlowers} and {neededMoney:f2} leva left.");
                    }
                    else
                    {
                        Console.WriteLine($"Not enough money, you need {Math.Abs(neededMoney):f2} leva more.");
                    }
                }

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

Като се замисля, neededMoney май трябва да е remainingMoney.

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