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

SkiTrip

#include <iostream>

using namespace std;

int main()
{
    int days;
    string room;
    string rating;
    double totalCost = 0;

    switch (room)
    {
        case "room for one person":
            if (rating == "positive")
            {
                totalCost = (days - 1) * 18*1.25;
            }
            else if (rating == "negative")
            {
                totalCost = (days - 1) * 18*1.10;
            }
            break;
        case "apartment":
            if (days < 10)
            {
                totalCost= ((days - 1)  25)-((days - 1)  25 * 0.30);
            }
            else if (days >= 10 && days<15)
            {
                totalCost = ((days - 1)  25) - ((days - 1)  25 * 0.35);
            }
            else if (days >= 15)
            {
                totalCost = ((days - 1)  25) - ((days - 1)  25 * 0.50);
            }
            if (rating == "positive")
            {
                totalCost = totalCost + (totalCost * 0.25);
            }
            else if (rating == "negative")
            {
                totalCost = totalCost - (totalCost * 0.10);
            }
            break;
        case "president apartment":
            if (days < 10)
            {
                totalCost = ((days - 1)  35) - ((days - 1)  35 * 0.10);
            }
            else if (days >= 10 && days < 15)
            {
                totalCost = ((days - 1)  35) - ((days - 1)  35 * 0.15);
            }
            else if (days >= 15)
            {
                totalCost = ((days - 1)  35) - ((days - 1)  35 * 0.20);
            }
            if (rating == "positive")
            {
                totalCost = totalCost + (totalCost * 0.25);
            }
            else if (rating == "negative")
            {
                totalCost = totalCost - (totalCost * 0.10);
            }
            break;
    }
    cout << totalCost;

    return 0;
}


Атанас решава да прекара отпуската си в Банско и да кара ски. Преди да отиде обаче, трябва да резервира
хотел и да изчисли колко ще му струва престоя. Съществуват следните видове помещения, със следните
цени за престой:
 &quot;room for one person&quot; – 18.00 лв. за нощувка
 &quot;apartment&quot; – 25.00 лв. за нощувка
 &quot;president apartment&quot; – 35.00 лв. за нощувка
Според броят на дните, в които ще остане в хотела (пример: 11 дни = 10 нощувки) и видът на помещението,
което ще избере, той може да ползва различно намаление. Намаленията са както следва:
вид помещение по-малко от 10 дни между 10 и 15 дни повече от 15 дни
room for one person не ползва намаление не ползва намаление не ползва намаление
apartment 30% от крайната цена 35% от крайната цена 50% от крайната цена
president apartment 10% от крайната цена 15% от крайната цена 20% от крайната цена
След престоя, оценката на Атанас за услугите на хотела може да е позитивна (positive) или негативна
(negative) . Ако оценката му е позитивна, към цената с вече приспаднатото намаление Атанас добавя 25% от
нея. Ако оценката му е негативна приспада от цената 10%.
Вход
Входът се чете от конзолата и се състои от три реда:
 Първи ред - дни за престой - цяло число в интервала [0...365]
 Втори ред - вид помещение - &quot;room for one person&quot;, &quot;apartment&quot; или &quot;president apartment&quot;
 Трети ред - оценка - &quot;positive&quot; или &quot;negative&quot;
Изход
На конзолата трябва да се отпечата един ред:
 Цената за престоят му в хотела, форматирана до втория знак след десетичната запетая.
Примерен вход и изход
Вход Изход Обяснения
14
apartment
positive

264.06 14 дни =&gt; 13 нощувки =&gt; 13 * 25.00 = 325 лв.
10 &lt; 13 дни &lt; 15 =&gt; 325 – 35%= 211.25 лв.
Оценката е positive =&gt; 211.25 + 25% = 264.0625 -&gt; 264.06 лв.
Вход

Ще ми трябва малко помощ!

 

Тагове:
0
Programming Basics with C++ 28/06/2019 11:10:14
RuNNeR4142 avatar RuNNeR4142 394 Точки

Много повтаряне на код и малко грешки с бакшиша,
ако разделиш задачата на части ще е много по-лесно и подредено.
Ето един примерен код на java https://pastebin.com/i6UbBwhy

0
28/06/2019 13:21:23
n.yordanov avatar n.yordanov 1 Точки

Здравей, кодът работи, но искам само да добавя, че си забравил (или не си копирал) import java.util.Scanner;

0
dmartinov avatar dmartinov 36 Точки

Честно казано самата математика не я проследих, но като започенм от там, че никъде не видях къде четеш входа от конзолата (а без това няма как да работи коректно програмата) и като завършим с това, че нямаш форматиране на изхода спрямо изискванията....judge ще се сърди много :) Освен това има една уловка която я обясниха на лекцията, а именно, че няма как със cin да прочетеш "room for one person". Трябва да го направиш с getline, което пък води след себе си друга особеност. Опитай се да го направиш и ако не, може да се опиташ да проследиш логиката в моя вариант. Но моя съвет е да изгледаш видеото от лекцията, защото там Марто показа как се решава и обясни тези особености, които ти споменах за cin и getline.

#include <iostream>
#include <string>

using namespace std;

int main() {

    string daysAsText, roomType, grade;

    getline(cin, daysAsText);
    getline(cin, roomType);
    getline(cin, grade);

    int days = stoi(daysAsText);
    int nights = days - 1;

    double price = 0;

    if (roomType == "apartment" && nights < 10) {
        price = (25 * nights) * 0.70;
    } else if (roomType == "apartment" && nights >= 10 && nights <= 15) {
        price = (25 * nights) * 0.65;
    } else if (roomType == "apartment" && nights > 15) {
        price = (25 * nights) * 0.50;
    } else if (roomType == "president apartment" && nights < 10) {
        price = (35 * nights) * 0.90;
    } else if (roomType == "president apartment" && nights >= 10 && nights <= 15) {
        price = (35 * nights) * 0.85;
    } else if (roomType == "president apartment" && nights > 15) {
        price = (35 * nights) * 0.80;
    } else if (roomType == "room for one person") {
        price = 18 * nights;
    }

    double finalPrice = 0;

    if (grade == "positive") {
        finalPrice = price + (price * 0.25);
    } else if (grade == "negative") {
        finalPrice = price * 0.90;
    }

    cout.setf(ios::fixed);
    cout.precision(2);
    cout << finalPrice << endl;

    return 0;
}

0
28/06/2019 17:25:40