Loading...
RadoslavBudinov avatar RadoslavBudinov 2 Точки

Самостоятелна задачка

Здравейте,

Докато си учих вкъщи реши да си задам една уж проста задачка за писане, но се оказа не толкова лесна за мен и знанията ми до момента. Условието е следното:

Да се напише код, който при вход на число от 2 или 2.00 до 6 или 6.00 изкарва съответстващото оценяване с думи. Пример: 2.00 - "poor", 2.49 - "poor", 2.50 - "average", 3.49 - "average", 4.00 - "good" 5 - "very good", 6.00 - "excellent".

Пояснения по рестрикции към задачата са: Въведеното число да има следните 2 варианта на input : Ако е цяло може да се впише като " 2 или 2.00", докато ако е реално  си остава в познатия ни от училище формат - Пример: 4.49. Съответно програма да крашва или ако искате да се направи да ви връща в началото да пробвате отново да въведете оценката при всеки по-различен начин на въвеждане на оценката в конзолата.  Както се подразбира ако числото е по-малко от А.50 се закръглява надолу, а ако е по-голямо или равно, съответно се закръглява нагоре (както беше в училище) :) .

Аз стигнах до следния код - http://pastebin.com/vcgN571L, само че срещнах един проблем:

 Когато въведа 2.50 и 4.50 ми изкарва - "poor" и "good", което е грешно, а при 3.50 и 5.50 изкарва правилно - "good" и "excellent" . Нямам си и на идея защо.

Моля ако някой знае нека каже. Ако някой също така може да напише по-компактен код нека го сподели за да си взема поука.

П.С. Сложил съм едно goto в повече, за по-лесно тестване на output-a. Просто да не стартирам наново програмата с ctrl+f5 за да тествам нови input-и.

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

Радо

Тагове:
0
Programming Basics 21/01/2017 22:25:25
AntonPetrov avatar AntonPetrov 491 Точки
Best Answer

Много добър въпрос, колега. Обърнете внимание на дефолтния метод на закръгляне при Math.Round() например тук. "If the fractional component of d is halfway between two integers, one of which is even and the other odd, the even number is returned. "

Това поведение може да се контролира при някой от другите варианти с допълнителни аргументи, например 

Math.Round (Decimal, MidpointRounding). Прочетете за двата варианта на MidpointRounding: AwayFromZero и ToEven, например тук.

0
22/01/2017 13:54:32
RadoslavBudinov avatar RadoslavBudinov 2 Точки

Еййй светлина в тунела! Благодаря!

0
AlucardDracula avatar AlucardDracula 416 Точки

http://pastebin.com/UEHnspQa мисля че се опитваш да правиш това нещо

0
RadoslavBudinov avatar RadoslavBudinov 2 Точки

Не точно, защото не е спазено условието на задачата за рестрикциите при input, а и при проверка примерно с 2.497 изкарва excellent, a  с 2.444 изкарва poor, a би трябвало да изкара грешка/ да крашне или да върне в началото. Мерси за опита все пак.

0
AlucardDracula avatar AlucardDracula 416 Точки

пробвай така 

if (number >= 2.00 && number <= 2.49)
            {
                Console.WriteLine("Poor");
            }
            else if (number >= 2.500000000000000 && number <= 3.490000000000000)
            {
                Console.WriteLine("Average");
            }
            else if (number >= 3.500000000000000 && number <= 4.490000000000000)
            {
                Console.WriteLine("Good");
            }
            else if (number >= 4.500000000000000 && number <= 5.490000000000000)
            {
                Console.WriteLine("Very good");
            }
            else
            {
                Console.WriteLine("Excelent");
            }

би трябвало да работи, но защо ?

просто double e точен до 15 та цифраслед десетичната запетая

0
RadoslavBudinov avatar RadoslavBudinov 2 Точки

Не знам, но сега това ми стана интересно - защо в твоя код, когато въведа число, по-голямо от 2.49 и по-малко от 2.50, примерно 2.49323, както и за другите оценки изкарва excellent. При теб така ли е ?

Иначе като цяло не е спазено условието на задачата при теб. Знам, че за домашно имахме подобна за тестове с if, но идеята на тази, която съм написал аз по-горе е да се ползват повече неща, не само if.  T.e. при твоя код може да се въведе всякакво число по-малко от 6, дори и накрая да му сложиш else if ( number <= 6 ), но има рестрикция в условието за формата, т..е или 5.00 или 5.12 или 5. При опити с 2.49323 би трябвало да дава грешка или да връща в началото( по условие ), но интересно при теб както казах по-горе, е че извежда грешен резултат за твоя код, което ме учудва още повече :) Хем double си e double :)

0
Xapuu avatar Xapuu 25 Точки

Ето моя вариан, който мисля че работи - http://pastebin.com/kk7keCH8 , а ето и малко инфо защо ти се получава грешка  - http://stackoverflow.com/questions/977796/why-does-math-round2-5-return-2-instead-of-3 , лек ден.

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