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
Stradjazz avatar Stradjazz 30 Точки

т.е. за да го познае трябва или да декларирам още преди това едната от опциите и после ифът само да й задава нова стойност, или да дам нулева стойност и после два ифа -  за всяка от стойностите по един?

0
vancho avatar vancho 430 Точки

Виж поста ми по-горе.

1
Stradjazz avatar Stradjazz 30 Точки

Благодаря много, всичко е ясно сега!

0
mariyanhadzhiev avatar mariyanhadzhiev 12 Точки

Не е лошо да ползваш {} докато свикнеш да разпознаваш по отместването (индентацията) кое къде почва и къде свършва. :) На изпита могат да се задават въпроси по условията по всяко време, квесторите винаги откликват ги потърсиш, особено за Programing Basics изпита. :)

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