Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият.
Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание.
Използваме бисквитки и за измерване на маркетинговите ни усилия.
А направил ли си проекта, в който е тази програма да е First Startup Project? Аз ти тествам програмата, различни данни дава, не съм я проверявал дали вярно смята :)
Копирах кода във нов проект, тъй като отказваше да почне debuggera (grayed out) и voila - програмата си изчисляваше всичко точно. Съответно и debuggera вече работеше, но нищо не намери естествено. Благодаря за помощта, възможно е да съм барнал някаква настройка или нещо което не е трябвало, защото кода все пак е верен. We will never know :D
Здравейте,
След като цял ден си блъскам главата с тази задача, най-после реших да се обърна към форума и попаднах тук. Отворих кода на vdimitrov13 и ми направи впечатление, че никъде не е декларирана стойност за BGN. Копирах кода и се уверих, че наистина работи безупречно, дори когато напиша BGN като валута. След това, обаче останових, че дори когато написха ghgjhsf конзолата ми приема стойността като 1, или все едно съм вкарала пак BGN. Та моят въпрос е, защо възприема всяка друга стойност от тези в condition-а като 1? Защо не като 0? Или защо не връща грешка, например "invalid input". Прощавайте за въпроса, ако е прекалено досаден за вас, но ми се струва, че е важно да разбера дали това си е така по подразбиране.
Благодаря!
Не съм сигурен, че разбрах въпроса ти но ще се опитам да ти отговоря. Ако на първия ред въведеш примерно 2, на следващите 2 реда дори да въведеш некоректни данни пак ще ти върне 2 като отговор, понеже променливата num си остава непроменена. Ще ти върне грешка ако на 1-ви ред въведеш примерно текст (string), но за следващите 2 реда променливата е от тип var, тоест не е казано точно какъв тип данни се изискват и конзолата ти приема всичко.
Num като като променлива защо се приема като 1? Това ми е въпросът. Въвеждам в конзолата:
1
EUR
BGN
1.96
1
EUR
djahdkah
1.96
т.е. num винаги е 1 (както е в случая с BGN), но моят въпрос е защо е така? Ако не се въведе стойност за променлива, тя винаги ли се разбира като единица?
Най-добре си пусни дебъгера с F10 и виж какво се случва.Като напишеш 20 и дсадас и дасдас става следното:Прочита ги от конзолата и вижда че няма съвпадение с if-else и просто отпечатва последния ред който е даден и затова каквото и да въведеш след цифрата ако не е това което се иска си изкарва числото.
Ако въведеш 0 и безмислен текст, ще ти върне 0 . Ако без да въвеждаш число, натиснеш enter ще ти върне грешка. Ако въведеш 20 EUR USD, ще си работи коректно.
Кода работи, защото приема (неправилно), че единствения възможен останал случай непокрит от IF-овете е BGN. А не показва грешка за невалидна валута, понеже не е включена такава функционалност.
За да покрива кода напълно заданието трябва да прави проверка за валидност на вида на валутата, включително и за BGN. Опционално да изкарва съобщение ако се изберат две еднакви валути и не се случва никаква конверсия.
Не съм сигурен Judge какви точно проверки прави и доколко изкарването на някакъв допълнителен и поясняващ текст няма да счупи решението.
Като допълнителен начин да се направи решението може да погледнеш как се ползва switch
ей тук и тук
Най-просто казано замества else if конструкцията с много красиви редове (cases).
ПС:
Да не забравя, понеже е важно. Типа на данните трябва да е decimal, вместо double. Това е специален тип данни, които се използват когато боравим с пари. Възможно е да почне да се оплаква VS, че курса на валутата е double, пък променливата е decimal. За да приема курса като същия тип, трябва да напишеш главно M, без интервал накрая напр.
тук е разписано подробно относно как се ползва типа
Според мен:
1. num е основата (BGN) и всички други валутни комбинации се изграждат, като функция от нея т.е. num * "някаква стойност" или num / "някаква стойност".
2. Ако човек не въведе някой от стринговете описани в if условията, ами въведе друг произволен стринг напр. first = ldksjfdlskfj и second = dlfjalsfjd резултатът е: каквото влезло такова излезло или output = input напр 10 = 10.
Защо?: След като липсват грешки в синтаксиса програмата се изпълнява еле и несмислена от функционална гледна точка, т.е. никой не е описал че въвеждането на недеклариран string е грешка. Програмта просто си проверява дали ще срещне познат стринг "usd", "gbp", "eur", ако не срещне не се прилага никаква математическа обработка на input и излиза без промяна на output.
3. Как да се коригира
3.1. Деклариране на "bgn" стринга.
3.2 Например формулиране на try, except блок където може да се опише програмата да вади съобщения от вида "Invalid input.- Must be: "usd", "gbp", "eur", "bgn". Real is: dlfsjfls.
4. Инак аз съм го решил:
4.1 така(с Dictionary): http://pastebin.com/UBFjShVJ
4.2 и така(с If-else if): http://pastebin.com/3BCTN7yp
Дано да съм бил полезен.
Поздрави.
Много благодаря за всички отговори. Ще пробвам различните методи. А според мен judje проверява резултата, а не прави проверка на самия код. Би било лудост някой да седне и да опише всички възможни варианти на код за всяка задача... по-скоро прави проверка в конзолата. Благодаря отново! Весел уикенд!
Ако за пром. first дадеш стойност, различна от "usd", "gbp" или "eur", първият if-else няма да се изпълни и num ще си остане num.
По същия начин за променливата second - ако стойността и е различна от изброените, num запазва първоначалната си стойност.
Ако и двете променливи first и second се различават от изброените, накрая ще отпечата num без промяна - все едно да конвертираш BGN -> BGN.
Във всички тези случаи няма умножение на num по 1, просто num не участва в допълнителни операции и стойността му не се променя.
В случая не е необходима променлива BGN, тъй като по условие данните винаги са валидни и не е необходима проверка за грешка.
По принцип лично аз съм на мнение, че е добре да има поне //коментар, когато има пропуск на код с идеята че ще се извърши подразбираща се функция.
Причина: Може да има объркване ако :
- имаме дълъг код, с много подобни ситуации
- трябва да се прави някакъв software support
-актуализиращият не е създателят на програмата
Птенциална ситуация: Чесане по глава, хвалебствия по роднинска линия какво забога прави еди кое си.
Това е мое виждане от гледната точка на прохождащ, но може напредналите да се ориентират по-бързо и горенаписаното да не е валидно.