Loading...
Stradjazz avatar Stradjazz 30 Точки

НЕРАЗБРАНИ условия в някои задачи

Здравейте,

Седнах да решавам някои от задачите, които са излизали на предишни изпити и това, което срещам, са условия на задачите, както в този пример:

"Задача 2. Цена за транспорт

Студент трябва да пропътува n километра. Той има избор измежду три вида транспорт:

  • . Начална такса: 0.70 лв. Дневна тарифа: 0.79 лв. / км. Нощна тарифа: 0.90 лв. / км.
  • . Дневна / нощна тарифа: 0.09 лв. / км. Може да се използва за разстояния минимум 20 км.
  • . Дневна / нощна тарифа: 0.06 лв. / км. Може да се използва за разстояния минимум 100 км.

Напишете програма, която въвежда броя километри n и период от деня (ден или нощ) и изчислява цената на най-евтиния транспорт.

Вход

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

  • Първият ред съдържа числото n – брой километри – цяло число в интервала [1…5000].
  • Вторият ред съдържа дума “day” или “night” – пътуване през деня или през нощта.

Изход

Да се отпечата на конзолата най-ниската цена за посочения брой километри."

Съответно аз написах код, в който програмата изчислява коя е най ниската цена, сравнявайки данните, с които разполагаме и прилагайки ги в два различни сценария - ден или нощ, спазвайки ограниченията за км. Кодът е тук: http://pastebin.com/SWzmU2nU

Изненадата ми дойде, когато прочетох авторското решение, където програмата просто изписва директно една от тарифите, съобразявайки се с ограниченията за км. Кодът е този>

 var distance = int.Parse(Console.ReadLine());
        var dayOrNight = Console.ReadLine();

        var taxiRate = 0.90;
        if (dayOrNight == "day") taxiRate = 0.79;

        if (distance < 20)
            Console.WriteLine("Taxi: {0}", 0.70 + distance * taxiRate);
        else if (distance < 100)
            Console.WriteLine("Bus: {0}", distance * 0.09);
        else
            Console.WriteLine("Train: {0}", distance * 0.06);

Въз основа на това имам два въпроса:

1. Ще могат ли да се задават въпроси на изпита по отношение на условията на задачите и щебъдат ли давани този род пояснения?

2. Някой ще бъде ли така добър да ми обясни кога се използват { } в if конструкции и кога - не и в какво се състои разликата (например опитах да направя това, което виждаме в 10, 11 ред на авторското решение и не успях защото под иф отварях къдрави скоби)?

 

Благодаря предварително!

 

0
Programming Basics 08/09/2016 19:44:27
jmmirchev avatar jmmirchev 0 Точки

Относно 1. не мога да отговоря, но мисля че мога да помогна със {} въпроса.
Скобите ({}) се използват когато искаме да изпълним група (блок) от команди, ако няма {} се изпълнява само първата команда след условието .

 

 

0
Stradjazz avatar Stradjazz 30 Точки

Благодаря много! А защо в следния случай ми дава грешка, с обяснението, че taxi doesn't exist in the current context?

 var n = int.Parse(Console.ReadLine());
            var time = Console.ReadLine();
        
            var bus = 0.09 * n;
            var train = 0.06 * n;

            if (time == "day")
            {
                var taxi = 0.79;
            }
            var price = Math.Min(taxi, bus);

0
vancho avatar vancho 430 Точки

Не си го декларирал извън if-a! Една променлива е видима само между { - отварящата и } - затварящата скоба.

 

            var n = int.Parse(Console.ReadLine());
            var time = Console.ReadLine();
        
            var bus = 0.09 * n;
            var train = 0.06 * n;

            var taxi = 0d;

            if (time == "day")
            {
                taxi = 0.79;
            }
            var price = Math.Min(taxi, bus);

 

Така би трябвало да е ОК.

1
08/09/2016 17:47:20
jmmirchev avatar jmmirchev 0 Точки

Здрасти , мисля че е защото taxi е дефинирана като локална променлива (т.е. тя е видима само между { }. Ивън тях не се вижда). Пробвай да я декларираш преди if .

0
vancho avatar vancho 430 Точки

От гледна точка на качествен програмен код и добра практика, е препоръчително винаги да се използват { } скоби. Счита се за лоша практика, ако не се използват. Използването на скоби прави кода по-четим и лесен за разбиране. На изпита може да питаш въпроси свързани с условието на задачата.

-1
08/09/2016 17:36:19
AntyfrizZz avatar AntyfrizZz 238 Точки

Здравей,

 

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

Колкото до if-а на един ред. Тези трите са абсолютно еквивалентни:

if (condition) doSomething

if (condition)
    doSomething

if (condition)
{
    doSomething
}

1вото и 2рото се използват, когати имаш само един ред в if-а. Не съм сигурен дали за повече редове ще работи, но няма да е пригледно. Колко е КПК не знам, защото не на едно място съм чел, че не е добре да се използва, но все по често го срещам и започвм да се чудя така ли е.

На изпит може да се пита за разяснения по условията на задачите.

 

Поздрави!

0
Stradjazz avatar Stradjazz 30 Точки

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

Не е страшно, имам 100/100 от първия път, но изписах 20 реда код за нещо, от което няма нужда, на изпита това може да ми изгуби време.

0
08/09/2016 17:51:35
Stradjazz avatar Stradjazz 30 Точки

Благодаря за отговорите!

0
AntyfrizZz avatar AntyfrizZz 238 Точки

Здравей,

 

Да, програмата ти е за изчисляване на това кой транспорт ще ти е най - евтин и съответно да изчислиш колко ще ти струва.

Не мисля че вникваш в задачата.

Ако имаш 150 километра, няма как автобуса или таксито да са ти по - евтини от влака, за това и не ги изчисляваш.

Ако имаш 25 километра, няма как да изпозлваш влак, за това и не го изчисляваш. Таксито няма да ти предостави по - добра цена от тази на автобуса, за това и не изчисляваш таксито.

Ако километрите са под 20, няма как да изпозлваш автобус или влак, за това изчисляваш само таксти.

 

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

Авторското решение прави точно това. За под 20км използва такси, защото не може да изпозлва по - евтин транспорт. За над 100 използва най - евтиния, и вече ако не е нито едно от тези значи е автобус.

 

Поздрави!

0
Pilgrimage avatar Pilgrimage 515 Точки

1. Ще могат ли да се задават въпроси на изпита по отношение на условията на задачите и ще бъдат ли давани този род пояснения?

На изпита могат да се задават въпроси най-вече по условията на задачите.
На изпита от 28 август, 3 пъти питах по условието на 6-та задача, догато си изясня какво се иска да се направи.

0
08/09/2016 17:40:48
WifiAvivi avatar WifiAvivi 151 Точки

1. Ще могат ли да се задават въпроси на изпита по отношение на условията на задачите и щебъдат ли давани този род пояснения?

Да, питай, защото е практика на изпитите да има и грешни условия. 

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