Loading...
karim.moh16 avatar karim.moh16 3 Точки

(Homework)Проблем с Currency Converter

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

 

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

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {

            double bgnValue = 1;
            double usdValue = 1.79549;
            double eurValue = 1.95583;
            double gbpValue = 2.53405;

            double price = double.Parse(Console.ReadLine());

            var input = Console.ReadLine();
            var output = Console.ReadLine();

            if (input == "bgn")
            {
                double valueInput = (price * bgnValue);
            }

            if (input == "usd")
            {
                double valueInput = (price * usdValue);
            }

            if (input == "eur")
            {
                double valueInput = (price * eurValue);
            }

            if (input == "gbp")
            {
                double valueInput = (price * gbpValue);
            }

            if (output == "bgn")
            {
                double valueOutput = (valueInput / bgnValue);
            }
            if (output == "usd")
            {
                double valueOutput = (valueInput / usdValue);
            }
            if (output == "eur")
            {
                double valueOutput = (valueInput / eurValue);
            }
            if (output == "gbp")
            {
                double valueOutput = (valueInput / gbpValue);
            }

            Console.WriteLine($"{valueOutput:F2}");


            //Курс        USD     EUR      GBP
            // 1 BGN   1.79549 1.95583 2.53405


            //var input = Console.ReadLine();// Enter BGN, USD, EUR or GBP currency
            // var output = Console.ReadLine();// Enter BGN, USD, EUR or GBP currency


        }
    }
}
 

Тагове:
0
Programming Basics with C#
icowwww avatar icowwww 2779 Точки

Ако дефинираш променлива в If-a тя ще може да се ползва само там. За случаите ползвай else if и else, не само if. Попринцип е хубаво да ползваш decimal за пари. Правиш проверка за валутата с малки букви, въпреки че тя се подава с големи. Проверката за BGN не ми се вижда логична, като умножава с 1 или дели на 1. Може да бъде опростена

Вмъкнах един toLower при четене, изкарах променливите извън скобите:

https://pastebin.com/gCmV4Z65

 

 

0
14/06/2018 11:45:09
karim.moh16 avatar karim.moh16 3 Точки

Да, изгледах малко по-натам в курса и видях. Благодаря!

0
Quake3 avatar Quake3 546 Точки

Здравей,

Обяви valueInput и valueOutput преди да ги използваш, примерно: така.

Също така, когато се работи с валута е по-добре да се използва decimal, а не double.

Имената на валутите трябва да са с големи букви: usd, трябва да е USD и т.н. примерно: така

0
14/06/2018 11:46:42
karim.moh16 avatar karim.moh16 3 Точки

Благодаря :)

1
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

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

   double valueInput =0; извади това извън проверките при другите променливи

а вътре в проверките остави    valueInput = (price * bgnValue);

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

if else if това вече е синтактична захар някои предпочитат както си го направил ти други както е посочил колегата,но не това е проблема а че променливата както си я създал същестува само между {} на if

0
14/06/2018 11:40:18
karim.moh16 avatar karim.moh16 3 Точки

Много благодаря :)

0
icowwww avatar icowwww 2779 Точки

С if и else if, програмата работи по-бързо. При използването му се правят по-малко проверки, тъй като спира да проверява свързаните случаи по-надолу в момента, в който провери текущия и той е true. Демек ако е подадено BGN ще влезне в първия If и ще прескочи всички проверки надолу. Не знам кой би предпочел да ползва if if if, при положение че даже става по нечетимо.

Двата начина биха направили еднакъв брой проверки единствено ако инпута е GBP.

0
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

мога да ти изброя доста хора Mosh oт udemy Кенов тук по лекции също съм го виждал, гледал съм и production code беше само if 

както казах това е до навик/конвенция на работното място и тн. а и разликата е толкова незначителна нали си играх един път с stopwatch да я видя. Аз не казвам че едното е по правилно или грешно просто реално е така,то иначе ако всичко се правеше по книга или конвенция на създателя на програмния език все едно сме роботи. А и ако имаш 10+ if else става малко претрупано и пак бих го разбил, но всичко зависи от ситуацията  кода, навиците и тн. но не е нещо което да ти счупи кода или апликацията.

0
yanchevstanko avatar yanchevstanko 1 Точки

Момчета много ме объркахте... И двамата... Толкова ненужни редове за няма нищо...
Ето го моето решение:

 var amount = decimal.Parse(Console.ReadLine());
            var currencyFrom = Console.ReadLine();
            var currencyTo = Console.ReadLine();
            if (currencyFrom == "BGN" && currencyTo == "USD") Console.WriteLine(Math.Round((amount / 1.79549m),2));
            if (currencyFrom == "BGN" && currencyTo == "EUR") Console.WriteLine(Math.Round((amount / 1.95583m),2));
            if (currencyFrom == "BGN" && currencyTo == "GBP") Console.WriteLine(Math.Round((amount / 2.53405m),2));
            if (currencyFrom == "USD" && currencyTo == "BGN") Console.WriteLine(Math.Round((amount * 1.79549m),2));
            if (currencyFrom == "USD" && currencyTo == "EUR") Console.WriteLine(Math.Round(((amount * 1.79549m) / 1.95583m),2));
            if (currencyFrom == "USD" && currencyTo == "GBP") Console.WriteLine(Math.Round(((amount * 1.79549m) / 2.53405m),2));
            if (currencyFrom == "EUR" && currencyTo == "USD") Console.WriteLine(Math.Round(((amount * 1.95583m) / 1.79549m),2));
            if (currencyFrom == "EUR" && currencyTo == "BGN") Console.WriteLine(Math.Round((amount * 1.95583m),2));
            if (currencyFrom == "EUR" && currencyTo == "GBP") Console.WriteLine(Math.Round(((amount * 1.95583m) / 2.53405m),2));
            if (currencyFrom == "GBP" && currencyTo == "USD") Console.WriteLine(Math.Round(((amount * 2.53405m) / 1.79549),2m));
            if (currencyFrom == "GBP" && currencyTo == "EUR") Console.WriteLine(Math.Round(((amount * 2.53405m) / 1.95583m),2));
            if (currencyFrom == "GBP" && currencyTo == "BGN") Console.WriteLine(Math.Round((amount * 2.53405m),2));

0
15/06/2018 02:13:35
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

скоро по -отварителен код не бях виждал,честно на някои ако му се наложи да чете или да дебъгва това..gg

a и понякога ако е малко по-четимо но по-дълго е по-добре. А допълнително не помним и точните условия колегата ни попита къде му е грешката и я посочихме. ако искам кратко решение ще наблъскам всичко в речник и само ще взимам стойностите по kлюча ще стане на 4 реда... никои не те объркал не можеш да четеш и второ това твоето е качам с грозде при малко по дълго и сложно и умираш.

https://pastebin.com/rehrdggz ето го с речник,много по-лесно се подържа и тн,ако реша да добавя махна други валути и тн.Но целта на тая лекция е да научите if else поне основите,иначе реално никои не би го написал това с толкова проверки.

0
15/06/2018 10:07:30
Galin.P87 avatar Galin.P87 45 Точки

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

https://pastebin.com/XypyQfeC

Иначе логиката е същата, като съм си спестил проверката за BGN, защото няма смисъл да се дели или умножава на 1.

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