Софтуерно Инженерство
Loading...
+ Нов въпрос
laziana86 avatar laziana86 4 Точки

Проблем с 8. Конвертор за мерни единици

Здравейте,

Имате ли представа какво се чупи в кода? Пробвах различни закръгления (по начина, който съм оставил сега, както и диретно с Console.WriteLine($"{distance:f8}");

и така и не изкарва коректните стойности.

https://pastebin.com/uGZ8sztD

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

 

veronikaaa86 avatar veronikaaa86 364 Точки

Първо делиш и после умножаваш :)

0
laziana86 avatar laziana86 4 Точки

Виж константите, които съм вкарал. Първото действие е вкарано още в тях.

Когато проверявам с примерните данни: 

1) Вход - 12 km ft - вместо 39370. 07886932 ми изкарва 39370.07880000

2) Вход - 150 mi in - тук изкарва верния резултат 9503999.99393599

3) Вход 450 yd km - вместо 0.41148000 ми изкарва 1.47637796

Май нещо съм разбъзикал коефициентите.

0
veronikaaa86 avatar veronikaaa86 364 Точки

Разгледах ги и според мен са объркани, но защо си усложняваш живота с тях, след като имаш едни готови цифри в условите на задачата :)

0
TodorovP avatar TodorovP 177 Точки

Твоят код изчислява само от изброените единици в метри и обратно - от метри в някоя от изброените единици. Трябва да се изчислява и от инчове в ярди например.

0
veronikaaa86 avatar veronikaaa86 364 Точки

Логиката на кода е да приравни всички мерни единици в метри чрез деление и после от метри в конкретната мерна единица чрез умножение :)

1
laziana86 avatar laziana86 4 Точки

Не е точно така. Първият if-else if цикъл проверява каква е входната величнина (метри, мм, см,...) и обръща въведената стойност distance в метри, а втория цикъл проверява каква е изходната величина (метри, мм, см,...) и обръща вече преизчислената стойност на distance в търсената величина. 

1
veronikaaa86 avatar veronikaaa86 364 Точки

Именно, първо обръща в метри входната мерна единица, а после от получените метри в изходната входна единица. Това съм казала и аз :) Приравнява се към една мерна единица, в случая е метри :)

0
veronikaaa86 avatar veronikaaa86 364 Точки

Стойностите си въведи както ти е в документа. Ето поправеното решение:

https://pastebin.com/aVivpXGg

0
laziana86 avatar laziana86 4 Точки

Благодаря. Явно нещо съм се омотал в самите коефициенти, сега наиситна изкарва верните стойности.

0
TodorovP avatar TodorovP 177 Точки

Предлагам на твоето внимание мое решение https://pastebin.com/SdeNKhCW

където става компактно с масиви от стрингове и числа.

0
iliyangeorgiev avatar iliyangeorgiev 1 Точки

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

https://pastebin.com/3dR6nKe4

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

0
svilendotorg avatar svilendotorg 2 Точки

Ето и моят начин, по който го направих:

            // INPUT
            double dist = double.Parse(Console.ReadLine());
            string inType = Console.ReadLine();
            string outType = Console.ReadLine();

            // DEFINITIONS
            double a = 0;
            double b = 0;

            if (inType == "m") a = 1;
            if (inType == "mm") a = 1000;
            if (inType == "cm") a = 100;
            if (inType == "mi") a = 0.000621371192;
            if (inType == "in") a = 39.3700787;
            if (inType == "km") a = 0.001;
            if (inType == "ft") a = 3.2808399;
            if (inType == "yd") a = 1.0936133;

            if (outType == "m") b = 1;
            if (outType == "mm") b = 1000;
            if (outType == "cm") b = 100;
            if (outType == "mi") b = 0.000621371192;
            if (outType == "in") b = 39.3700787;
            if (outType == "km") b = 0.001;
            if (outType == "ft") b = 3.2808399;
            if (outType == "yd") b = 1.0936133;

            // OUTPUT
            double result = dist/a*b;
            Console.WriteLine($"{result:F3}");
 

0