Loading...
Ivan89pln avatar Ivan89pln 14 Точки

Въпрос и мнение относно // 12. Currency Converter от Simple Calculations

Здравейте,доста начинаещ съм в програмирането и все още ми е тъмна Индия.Имам въпрос към по-напредналите програмисти,които ако биха били така любезни да си кажат мнението относно тази задача (12. Currency Converter от Simple Calculations).Опитах се да я реша по мой начин,който мисля,че е супер зле,но все пак Judge System ми даде 100/100.Моята молба към вас е да си дадете мнението за моето решение,как и къде съм сбъркал,понеже все си мисля,че нещо не е наред въпреки да съм взел макс точките от Judge.

А ето и моя вариант:            http://pastebin.com/SNPVza3x

Благодаря!

Тагове:
0
Programming Basics 17/12/2016 14:47:13
ambiorix avatar ambiorix 640 Точки
Best Answer

Здравей.

Редно е имената на променливите да са на английски език. По-добре да свикнеш да ги кръщаваш така отсега, защото никъде няма да може да ползваш "izhod" като започнеш работа.

Дължината на имената трябва да е такава че да дава достатъчно описание за какво е променливата - напр inputCurrency, personPerTrip, totalCost. Ако стане прекалено дълго, то вероятно са ти нужни повече от една променливи - напр. pricePerProductAverageEachCity. Обикновено конвенцията е съществително+наречие(или обратното) или само съществително: carPrice, phoneColor, sizeBox, areaFloor, areaCeiling.

Последна препоръка, за изразите които слагаш след Console.WriteLine("{0:f2}", - хубаво е когато е по-сложен израз да го изнесеш в отделна променлива, защото е по-четимо и по-лесно за дебъгване. За този пример е обикновено деление и няма смисъл.

Ето алтернативен подход ако имаш интерес: https://github.com/gaydov/Softuni-Programming-Basics/blob/master/2SimpleCalculations/CurrencyConverter/CurrencyConverter.cs

0
27/01/2017 19:44:13
Ivan89pln avatar Ivan89pln 14 Точки

Доста добри и пълнозначни отговори получих,благодаря! 

0
MVladimir avatar MVladimir 11 Точки

Според мен кода ти е ок, с изключение на това, че нямаш условие при което входа и изхода са равни. Другото което забелязах , че имената на променливите са "кофти". Пример за по-добро именуване: твоето vhod да бъде input, съответно izhod - exit. Да вметна , че имената на променливите не трябва да започват с големи букви и да се спазва правилото- PascalCase.

 

0
17/12/2016 13:13:27
Ivan89pln avatar Ivan89pln 14 Точки

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

0
ThePSXHive avatar ThePSXHive 436 Точки

Това е по-скоро догматичен подход към найменуването на променливите и функциите. Същото като с неупотребата на goto. Винаги има изключения (дори и за goto), и човек трябва да бъде подготвен да ги прави вместо да следва сляпо всяко правило "to a T". Освен това, различните компании използват различни конвенции за наименуване. Това е вярно и за open source проектите. Някои биха предпочели camel case. Други предпочитат pascal case. Затова, по-важно е човек да избере онзи стил, които е в употреба там, където се работи с него. След това остава само да използва този стил (a) с постоянство (не на едно място да използваш camel case, а на следващото pascal case в един и същ codebase), и (b) да не превръща качеството на кода единствено функция на naming стила, а да придава описателни имена на всяка променлива и функция, ако и когато това се налага.   

0
17/12/2016 13:57:36
ThePSXHive avatar ThePSXHive 436 Точки

Понеже сравняваш два вида валути и след това извеждаш резултат спрямо една от тях, бих ти препоръчал да използваш найменованията inputCurrency/outputCurrency, или firstCurrency/secondCurrency. Първото ми се струва по-описателно от второто, но преценката е твоя. Също така, аз бих пренаписал този дълъг блок със сравненията използвайки тернарния оператор (?:), но ти може все още да не си стигнал до този материал, така че не е болка за умиране. 

0
Sim0o0na avatar Sim0o0na Trainer 567 Точки

Използвай pastebin!

1
g_todorov avatar g_todorov 106 Точки

Здравей Ivan89pln,

аз също съм начинаещ и ти споделям моето решение на задачата. По-старшите ще споделят конвенциите за именуване на променливите, но аз използвах в тая задача по-дълги, но доста описателни имена на променливите. Мисля, че по тоя начичн кода става много по-лесен за разбиране и веднага може да проследиш кое от къде, с какво и за къде се пресмята и манипулира. Предполагам, че в понататъшното ни обучение ще ни посветят може би специална лекция за именуване на променливи. Тук е мястото да попитам по-старшите колеги как да раберем, че вече сме прекалили с дължината на името на променливата и да включим коментар, което неминуемо ще се наложи, защото кодовете ще стават все по-дълги?

ето и кода ми - работещ на 100/100; http://pastebin.com/i3b6bk96

1
18/12/2016 15:43:59
cvetomirG avatar cvetomirG 132 Точки

http://pastebin.com/CrEv6Q4p Ето едно вариантче с дикшънари.

 

 

http://pastebin.com/8bHjbqWQ ето и още едно решение, където съм ползвал методче  за да се намали кода

 

1
18/12/2016 14:55:15
g_todorov avatar g_todorov 106 Точки

оптимален код - личи, че си напред с материята! :)

0
Sim0o0na avatar Sim0o0na Trainer 567 Точки

Едно от правилата на форума е да използваш pastebin за дълъг код! :)

1
g_todorov avatar g_todorov 106 Точки

Пускам ти още едно решение на тая задача с уговорката, че не е толкова оптимално, както на колегата cvetomirG, но пък с него можеш да видиш как действа конструкцията switch case:

1.Слагаш си една променлива, var amount =double.Parse която да ти изчита и пази стойността на 1-ви ред от конзолата.

2.Слагаш 2 последователни променливи в случая currency1 и currency2, които да ти пазят стринговете, които ще ти изчетат от конзолата (BGN, USD, EUR, GBP )  

3.Слагаш си помощни променливи val1 и val2 с първоначални стойности double, защото по-късно ще съхраняваш в тях double стойности 

4.Пускаш си switch конструкция, която ти проверява променливата currency1  и ако срещне стринг "BGN" присвоява стойност на променливата val1=1 ...така проверява до долу  и като срещне съвпадение презаписва val1 и спира(излиза) от switch case конструкцията. Идентична е ситуацията при следващата switch case конструкция.

5.Следва пресмятане и изпечатване на резултата със закръгляне до 2-рия знак.

Успех.

http://pastebin.com/5r7LNbju

 

1
Ivan89pln avatar Ivan89pln 14 Точки

Страхотно,точно и за конструкцията switch case: си мислих,но някак си не се чуствах сигурен да я използвам.Сега поне ще ги разгледам по-подробно тези случаи да видя за какво иде реч.  

1
IliyanTsvetkov avatar IliyanTsvetkov 2 Точки

Здравейте, да питам и аз защо кода за тази задача работи при мене в IntelliJ но в "Judge" системата изписва грешки ( https://judge.softuni.bg/Contests/Submissions/View/2370654 )

Ето го линка за кода: http://pastebin.com/vgKCcHas

 

 

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