Софтуерно Инженерство
Loading...
alexis.driomova avatar alexis.driomova 3 Точки

Помощ със задача на C++//4.Нов дом

Здравейте,може ли да ми кажете къде греша в кода си?Това е задачата.

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

цвете

Роза

Далия

Лале

Нарцис

Гладиола

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

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.

#include <iostream>
#include <string>
using namespace std;
 
int main() {


    string flowers;
    cin >> flowers;
    int quantity, budget;
    cin >> quantity >> budget;


    
    double priceflower = 0;

    if (flowers == "Roses") {
        priceflower = 5;
    }
    else if (flowers == "Dahlias") {
        priceflower = 3.80;
    }
    else if (flowers == "Tulips") {
        priceflower = 2.80;
    }
    else if (flowers == "Narcissus") {
        priceflower = 3;
    }
    else if (flowers == "Gladiolus") {
        priceflower = 2.50;
    }

    double totalprice = quantity * priceflower;

    if (quantity > 80 && flowers == "Roses") {
        totalprice = totalprice - 0.10*totalprice;
    }
    else if (quantity > 90 && flowers == "Dahlias") {
        totalprice = totalprice - 0.15*totalprice;
    }
    else if (quantity > 80 && flowers == "Tulips") {
        totalprice = totalprice - 0.15*totalprice;
    }
    else if (quantity <120 && flowers == "Narcissus") {
        totalprice = totalprice + 0.15*totalprice;
    }
    else if (quantity < 80 && flowers == "Gladious") {
        totalprice = totalprice+ 0.20*totalprice; /
    }
    cout.setf(ios::fixed);
    cout.precision(2);


    if (budget >= totalprice){
        double moneyleft = budget - totalprice;
        
        cout << "Hey, you have a great garden with " << quantity <<" "<< flowers << " and "
            <<moneyleft <<" leva left." << endl;}
    else  {
        double moneymore =  totalprice - budget;
        
        cout << "Not enough money, you need "<<moneymore <<" leva more." << endl;
    }

 
    system("pause");
    return 0;
}

Тагове:
0
C++ Programming 14/08/2019 17:01:51
mark79 avatar mark79 257 Точки

Здравей,

имаш изядена една буква от името на цветето и е необходимо да коригираш реда с ето този код :

else if (quantity < 80 && flowers == "Gladiolus")

 

И да споделя какво може да се оптимизира според мен в кода :

Например този израз

totalprice = totalprice - 0.10*totalprice;

математически може да се изрази като

totalprice = 1.00 * totalprice - 0.10 * totalprice;

което е равносилно на

totalprice = 0.90 * totalprice;

или съответно

totalprice *= 0.90;

 

Аз лично бих извършил сметките, като сметна единичната цена за цвете и тогава да сметна общата им цена

if (quantity > 80 && flowers == "Roses")
{
    priceflower *= 0.90;
}
else if (quantity > 90 && flowers == "Dahlias")
{
    priceflower *= 0.85;
}
else if (quantity > 80 && flowers == "Tulips")
{
    priceflower *= 0.85;
}
else if (quantity < 120 && flowers == "Narcissus")
{
    priceflower *= 1.15;
}
else if (quantity < 80 && flowers == "Gladiolus")
{
    priceflower *= 1.20;
}
    
double totalprice = quantity * priceflower;

Да не казвам, че бих използвал и тернарен оператор, за да съкратя кода, но става тегаво за четене

double priceflower = 0;

if (flowers == "Roses")
{
    priceflower = quantity > 80 ? 5.00 * 0.9 : 5.00;
}
else if(flowers == "Dahlias")
{
    priceflower = quantity > 90 ? 3.80 * 0.85 : 3.80;
}
else if (flowers == "Tulips")
{
    priceflower = quantity > 80 ? 2.80 * 0.85 : 2.80;
}
else if (flowers == "Narcissus")
{
    priceflower = quantity < 120 ? 3.00 * 1.15 : 3.00;
}
else if (flowers == "Gladiolus")
{
    priceflower = quantity < 80 ? 2.50 * 1.20 : 2.50;
}

double totalprice = quantity * priceflower;

Поздрави :)

0
15/08/2019 19:30:06
alexis.driomova avatar alexis.driomova 3 Точки

Много благодаря,отново!  laugh

0
MartinBG avatar MartinBG 1151 Точки

Аз бих заложил на четимостта и лесното дебъгване на кода, особено в начален курс като този. :)

Например:

    double priceFlower = 0.0;
    double priceModifier = 1.0;

    if (flowers == "Roses")
    {
        priceFlower = 5.0;
        if (quantity > 80)
        {
            priceModifier = 0.9;
        }
    }
    else if(flowers == "Dahlias")
    {
        priceFlower = 3.8;
        if (quantity > 90)
        {
            priceModifier = 0.85;
        }
    }
    else if (flowers == "Tulips")
    {
        priceFlower = 2.8;
        if (quantity > 80)
        {
            priceModifier = 0.85;
        }
    }
    else if (flowers == "Narcissus")
    {
        priceFlower = 3.0;
        if (quantity < 120)
        {
            priceModifier = 1.15;
        }
    }
    else if (flowers == "Gladiolus")
    {
        priceFlower = 2.5;
        if (quantity < 80)
        {
            priceModifier = 1.2;
        }
    }

    double totalPrice = quantity * priceFlower * priceModifier;

 

0