Loading...
PetarJekov97 avatar PetarJekov97 7 Точки

[Homework] Currency Converter help

Ако някой може да подаде ръка на начинаещ онлайн колега , би било много хубаво . Имам нужда от помощ в задачата за конвертиране на валути . Кои команди да ползвам , за направата на самият код ? Може би var или  Dictionary<string, double> factors = new Dictionary<string, double>(); factors.Add("GBP", 0); factors.Add("USD", 0); ? Или други ? Моля помогнете . 

Поздрави !

Тагове:
1
Programming Basics 24/01/2016 12:17:15
pebodi avatar pebodi 29 Точки

Курсът е обявен за начинаещи. Не съм сигурен, че тази задача е за такива. Явно колегата е намерил решението някъде в мрежата. Аз още не съм решавал задачата, сега започвам. На първо гледане "съдията" на решенията не обича операторите, които подканват с текст да въведат нещо. Т.е. - Console.WriteLine("Please enter the amount of Euro you wish to be converted:"); това трябва да се закоментари. От същият оператор става ясно, че намереният в мрежата пример преобразува EUR в GBP или USD, както се вижда от "речника" на валутите, в него трябва да се добави и EUR. - 

Dictionary<string, double> factors = new Dictionary<string, double>();

            factors.Add("GBP", 0);

            factors.Add("USD", 0);

От условието аз разбирам, че трябва да се въведе сума и валута в която е и в коя да се преобразува, докато в примера преобразуват EUR в такава, която е въведена от конзолата. Значи трябва да се пейстне още един фрагмент ... wink

1
PetarJekov97 avatar PetarJekov97 7 Точки

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

Поздрави !

0
pebodi avatar pebodi 29 Точки

Мисля, че я реших. Не знам обаче, тук във форума дали може да постваме решенията. А за обясненията - и аз съм начинаещ, е може би съвсем малко знам от предишни занимания. Започнах от твоя пример, намерих в мрежата нещо подобно и го допълних с това, което писах горе. Още не съм гледал видеото на Наков, но според мен беше редно да ни занимаят с някакви минимални обяснения за изпалзваните методи. Карам един друг курс, и там е същото. Лекторът написва някакви заклинания и обяснението му е - намерете подобно решение в мрежата и го разучете.

Нещо не работи правилно, когато съм готов, ще пиша.

2
r3v3nan7 avatar r3v3nan7 365 Точки

Аз я реших и то по 2 начина. Изчакай малко да сложа кодовете и коментари в pastebin и ще сложа линк.. ще ми трябва малко

време , така че моля бъдеде търпеливи :)  Ще се опитам и добре да обясня до колкото мога, но ще ми трябва както казах малко време :) 

3
bardjo avatar bardjo -1 Точки

Незнам за вас, аз я реших с if else кострукция, сякаш така ми беше по лесно . Но все пак тази с Switch casa сащо май е подходяща.....

0
dakata avatar dakata 26 Точки

При мен и при двата случая (if else, switch case) в Judge системата ми дава Run-Time error :(

В VS Express всичко е ОК! Кода е следния: 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Program
{
    class Program
    {
        static void Main()
        {
            var input = Console.ReadLine();// Enter BGN, USD, EUR or GBP currency
            var output = Console.ReadLine();// Enter BGN, USD, EUR or GBP currency
            var value = double.Parse(Console.ReadLine());
            var bgn = 1.0;
            var usd = 1.79549;
            var eur = 1.95583;
            var gbp = 2.53405;
            switch (input)
            {
                case "BGN":
                    break;
                case "USD":
                    value = value * usd;
                    break;
                case "EUR":
                    value = value * eur;
                    break;
                case "GBP":
                    value = value * gbp;
                    break;
                default:
                    break;
            }
            switch (output)
            {
                case "BGN":
                    value = value / bgn;
                    break;
                case "USD":
                    value = value / usd;
                    break;
                case "EUR":
                    value = value / eur;
                    break;
                case "GBP":
                    value = value / gbp;
                    break;
                default:
                    break;
            }
            Console.WriteLine(Math.Round(value, 2) + " " + output);
        }
    }
}

Грешката е следната: 

Unhandled Exception: System.FormatException: Input string was not in a correct format.
   at System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
   at Program.Program.Main()

Явно проблема се получава при парсването !? 

var value = double.Parse(Console.ReadLine());

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

1
dakata avatar dakata 26 Точки

Интересно, просто преместих реда var value = double.Parse(Console.ReadLine()); най-отгоре:

 

 static void Main()
        {
            var value = double.Parse(Console.ReadLine());
            var input = Console.ReadLine();// Enter BGN, USD, EUR or GBP currency
            var output = Console.ReadLine();// Enter BGN, USD, EUR or GBP currency

И системата прие решението ... 

1
r3v3nan7 avatar r3v3nan7 365 Точки

Гледам ти кода , но и аз все още не разбирам защо гърми ? .. Изписва , че има грешка с input, или по-скоро , че е в грешен формат, но 

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

0
luki_strike avatar luki_strike 9 Точки

Ето част от моето решение. Сищите ифове използвам и за другите валути. Защото валутните суми са за 1 лев все пак. Не като ваведеш число и да го умножава директно стойност по курс.

http://pastebin.com/ayuqGTU1

0
bardjo avatar bardjo -1 Точки

Някой може ли да ми каже дали if-else.-If  или switch case компилация е по-барза и коя е по-добре да се използва в подобни случаи

0
r3v3nan7 avatar r3v3nan7 365 Точки

Според мен ако си начинаещ по-добре се опитай да я направиш и по двата начина. Има време когато ще мислим 

за бързодействие, но то не е сега. В момента е много по-важно да усвояваме знания :)

0
Cwetkoyy avatar Cwetkoyy 3 Точки

Eто моето решение, дава ми 80 от 100т. в  джъдж системата.

http://pastebin.com/f6vYBPsh

0
Tanina80 avatar Tanina80 11 Точки

На мен за switch case ми дава два пъти по-малко време за изпълнение - 

за SWITCH

Памет: 8.45 MB 
Време: 0.015 s

за IF

Памет: 8.46 MB 
Време: 0.031 s
0
Kralev avatar Kralev 15 Точки

Здравейте! Ето още едно решение различно от останалите. Това беше първото ми решение, след което намерих case-break в MSDN и т.н.!

Не е красиво, но си дава 100 от 100!

 

using System;

namespace Currency_Converter
{
    class CurrencyConverter
    {
        static void Main(string[] args)
        {
            var amount = double.Parse(Console.ReadLine());
            var currencyFrom = Console.ReadLine();
            var currencyTo = Console.ReadLine();
            if (currencyFrom == "BGN" && currencyTo == "USD") Console.WriteLine(Math.Round((amount / 1.79549),2));
            if (currencyFrom == "BGN" && currencyTo == "EUR") Console.WriteLine(Math.Round((amount / 1.95583),2));
            if (currencyFrom == "BGN" && currencyTo == "GBP") Console.WriteLine(Math.Round((amount / 2.53405),2));
            if (currencyFrom == "USD" && currencyTo == "BGN") Console.WriteLine(Math.Round((amount * 1.79549),2));
            if (currencyFrom == "USD" && currencyTo == "EUR") Console.WriteLine(Math.Round(((amount * 1.79549) / 1.95583),2));
            if (currencyFrom == "USD" && currencyTo == "GBP") Console.WriteLine(Math.Round(((amount * 1.79549) / 2.53405),2));
            if (currencyFrom == "EUR" && currencyTo == "USD") Console.WriteLine(Math.Round(((amount * 1.95583) / 1.79549),2));
            if (currencyFrom == "EUR" && currencyTo == "BGN") Console.WriteLine(Math.Round((amount * 1.95583),2));
            if (currencyFrom == "EUR" && currencyTo == "GBP") Console.WriteLine(Math.Round(((amount * 1.95583) / 2.53405),2));
            if (currencyFrom == "GBP" && currencyTo == "USD") Console.WriteLine(Math.Round(((amount * 2.53405) / 1.79549),2));
            if (currencyFrom == "GBP" && currencyTo == "EUR") Console.WriteLine(Math.Round(((amount * 2.53405) / 1.95583),2));
            if (currencyFrom == "GBP" && currencyTo == "BGN") Console.WriteLine(Math.Round((amount * 2.53405),2));
        }
    }
}

0
TihomirTraykov avatar TihomirTraykov 0 Точки

Това решение ми се вижда най-разбираемо от всички които погледнах. Или поне със знанията които имаме до тук:)

0
Marhov.ltd avatar Marhov.ltd 2 Точки

Това е моето решение ( http://pastebin.com/Vn3GSp72 ) на задачата и на локално ниво всичко си работи. Не знам защо прави проблем, някой може ли да ми обясни къде греша?

0
19/06/2016 21:33:23
Tanina80 avatar Tanina80 11 Точки

Пробвах я в MVS и изведе най-неочаквания за мен резултат :)))))

При условие, че си указал да ти изпише 4 реда ... изписва само един и то с верен резултат :)))))

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

0
Marhov.ltd avatar Marhov.ltd 2 Точки

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

0
Stradjazz avatar Stradjazz 30 Точки

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

 

0
YordanDringov avatar YordanDringov 26 Точки

Решението ти с dictionary много ми хареса. Доста улеснено и интелигентно. Най-важното,че не губиш време в писането на излишен код и възможността да допуснеш грешка е сведена до минимум. Мисля че е време да хвърля едно око на Глава 18 Речници. 

1
NinaK avatar NinaK 21 Точки

Това с dictionary е страхотно решение. С пет реда решаваш 12 комбинации. И аз ще се поразровя да го проуча.

3
Tanina80 avatar Tanina80 11 Точки

И аз се чудех за решение с използването на шаблони от рода на {1} {2} .... , а това е точно такова. Това ли е начинът в случая? Да се използва dictionary?

1
gnikolov avatar gnikolov 4 Точки

Здравейте, като абсолютно начинаещ моя код с if  и else if конструкция. Малко е дълъг, но за сметка на това Judge го приема за верен.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Currency_Converter
{
    class Program
    {
        static void Main(string[] args)
        {
            double a = double.Parse(Console.ReadLine());
            string b = Console.ReadLine();
            string c = Console.ReadLine();
            double BGN = 1;
            double USD = 1.79549;
            double EUR = 1.95583;
            double GBP = 2.53405;

            if (b == "BGN" & c == "USD")
            { Console.WriteLine(Math.Round((a * BGN / USD), 2) + " " + c); }

            else if (b == "BGN" & c == "EUR")
            { Console.WriteLine(Math.Round((a * BGN / EUR), 2) + " " + c); }

            else if (b == "BGN" & c == "GBP")
            { Console.WriteLine(Math.Round((a * BGN / GBP), 2) + " " + c); }

            else if (b == "USD" & c == "EUR")
            { Console.WriteLine(Math.Round((a * USD / EUR), 2) + " " + c); }

            else if (b == "USD" & c == "GBP")
            { Console.WriteLine(Math.Round((a * USD / GBP), 2) + " " + c); }

            else if (b == "USD" & c == "BGN")
            { Console.WriteLine(Math.Round((a * USD / BGN), 2) + " " + c); }

            else if (b == "EUR" & c == "GBP")
            { Console.WriteLine(Math.Round((a * EUR / GBP), 2) + " " + c); }

            else if (b == "EUR" & c == "USD")
            { Console.WriteLine(Math.Round((a * EUR / USD), 2) + " " + c); }

            else if (b == "EUR" & c == "BGN")
            { Console.WriteLine(Math.Round((a * EUR / BGN), 2) + " " + c); }

            else if (b == "GBP" & c == "EUR")
            { Console.WriteLine(Math.Round((a * GBP / EUR), 2) + " " + c); }

            else if (b == "GBP" & c == "USD")
            { Console.WriteLine(Math.Round((a * GBP / USD), 2) + " " + c); }

            else if (b == "GBP" & c == "BGN")
            { Console.WriteLine(Math.Round((a * GBP / BGN), 2) + " " + c); }
        }
    }
}
 

 

0
teodorivchev avatar teodorivchev 1 Точки

Браво мн добре обработен код (много добре разбираем)

Поздравления :):):)

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