Loading...

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

xpainkillerx avatar xpainkillerx 14 Точки

08. Metric Converter - проблем с проверките на Judge

Здравейте,

имам проблем със задачата "Конвертор на мерни единици".

Понеже решението с if-else  е доста дълго реших да го направя със Switch-case.

Във VS всичко работи нормално, но Джъдж ми дава само 65 точки и ми показва грешен резултат 

в няколко проверки, Моля ако някой намери грешките да ми ги сподели :) 

Благодаря!

Кодът е на C#

https://pastebin.com/asnGWG3Q

 

Ето и условието на задачата:

Задача: конвертор за мерни единици
Да се напише програма, която преобразува разстояние между следните 8 мерни единици: m, mm, cm, mi, in, km, ft, yd. Използвайте съответствията от таблицата по-долу:

Входна единица                  Изходна единица

1 meter (m)                                1000 millimeters (mm)

1 meter (m)                               100 centimeters (cm)

1 meter (m)                                0.000621371192 miles (mi)

1 meter (m)                                39.3700787 inches (in)

1 meter (m)                               0.001 kilometers (km)

1 meter (m)                               3.2808399 feet (ft)

1 meter (m)                               1.0936133 yards (yd)



Входните данни се състоят от три реда:
• Първи ред: число за преобразуване.
• Втори ред: входна мерна единица.
• Трети ред: изходна мерна единица (за резултата).

Тагове:
0
Programming Basics 06/09/2019 19:46:56
kkaraivanov avatar kkaraivanov 486 Точки

Заповядай :)

 


namespace JudgePractice
{
    using System;
    class Program
    {
        static void Main(string[] args)
        {
            double readNumber = double.Parse(Console.ReadLine());
            string readFerstUnit = Console.ReadLine().ToLower();
            string readSecondUnit = Console.ReadLine().ToLower();

            double ferstResult = 0;
            double result = 0;
            double m = 1;
            double mm = 1000;
            double cm = 100;
            double mi = 0.000621371192;
            double inch = 39.3700787;
            double km = 0.001;
            double ft = 3.2808399;
            double yd = 1.0936133;

            switch (readFerstUnit)
            {
                case "m": break;
                case "mm":
                    ferstResult = readNumber / mm;
                    break;
                case "cm":
                    ferstResult = readNumber / cm;
                    break;
                case "mi":
                    ferstResult = readNumber / mi;
                    break;
                case "inch":
                    ferstResult = readNumber / inch;
                    break;
                case "km":
                    ferstResult = readNumber / km;
                    break;
                case "ft":
                    ferstResult = readNumber / ft;
                    break;
                case "yd":
                    ferstResult = readNumber / yd;
                    break;
            }
            switch (readSecondUnit)
            {

                case "m":
                    result = ferstResult * m;
                    break;
                case "mm":
                    result = ferstResult * mm;
                    break;
                case "cm":
                    result = ferstResult * cm;
                    break;
                case "mi":
                    result = ferstResult * mi;
                    break;
                case "inch":
                    result = ferstResult * inch;
                    break;
                case "km":
                    result = ferstResult * km;
                    break;
                case "ft":
                    result = ferstResult * ft;
                    break;
                case "yd":
                    result = ferstResult * yd;
                    break;
            }
            Console.WriteLine($"Result = {result:f2}{readSecondUnit}");
        }
    }
}

0
06/09/2019 21:13:35
xpainkillerx avatar xpainkillerx 14 Точки

Привет колега:)

Благодаря за бързата реакция! Току що пробвах кода в Judge , но ми даде 0 точки. Прави го защото ти закръглящ до втория знак, в условието не се изисква. Промених изхода ти със Console.WriteLine(result);  но ми дава пак 65 точки, както на моя код. Прегледах кода ти и в смислово отношение е 1:1 с моя. 

Възможно ли е Judge да е бъгнал нещо....

0
kkaraivanov avatar kkaraivanov 486 Точки

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

0
xpainkillerx avatar xpainkillerx 14 Точки

"Насоки и подсказки
Прочитаме си входните данни, като към прочитането на мерните единици можем да добавим функцията ToLower(), която ще направи буквите малки. Както виж-даме от таблицата в условието, можем да конвертираме само между метри и ня-каква друга мерна единица. Следователно трябва първо да изчислим числото за преобразуване в метри. Затова трябва да направим набор от проверки, за да оп-ределим каква е входната мерна единица, а след това и за изходната мерна еди-ница."

Само това не съм копирал от условието. В горния пост е същинското условие на задачата. Няма допълнителни указания.

Давам ти и примерен вход-изход оставен за самопроверка:

Вход          Изход                                           Вход         Изход                     

12             39370.0788                                    150         9503999.99393599

km                                                                    mi

ft                                                                       inch

 

Имам съмнения, че бъгва на проверките когато за втората променлива се въведе inch... 

0
knoteva avatar knoteva 1081 Точки

Здравей,

Едната грешка е, че в switch-a си написал "inch" вместо "in". firstUnit(in,)няма общо с с твоята променлива double inch.

Освен това в switch (firstUnit) при case "m": трябва да имаш result = value / m; Иначе при примерен вход 12/m/cm result ще няма да присвои 12 / 1, а ще остане 1.

https://pastebin.com/FPKGgJaG

0
07/09/2019 14:23:33
xpainkillerx avatar xpainkillerx 14 Точки

Здравей, да права си за " result = value / m;" , благодаря ти.

Проблемът е, че VS не ми позволява да дефинирам променлива : double in = (и т.н.)   - дава ми "in" като ключова дума... не зная защо.

Използвах кода , който ми изпрати като поправих навсякъде да "inch" но judge ми дава 76 т.

Това ми изписва като Ерор при дефиниране на double in = double.Parse(Console.ReadLine());
Error    CS1001    Identifier expected    
Error    CS1003    Syntax error, ',' expected    Exercise\alchocolShop\Program.cs    9    Active
Error    CS1002    ; expected    
Error    CS1525    Invalid expression term '='    
 

0
knoteva avatar knoteva 1081 Точки

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

Да, като декларираш променливата трябва да е inch(или някакво друго име, примерно inches, apples и т.н.).

Само в двата кейса трябва да е in:

case "in"(това е firstUnit. Тя е стринг и се подава от вход.): result = value / inch(това е променливата, която сме дефинирали по-горе); break; Двете неща са различни. Едното в случая е стринг(условието), а другото си е твоята double променлива, с която се извършват някакви действия ако условието е вярно. "in" трябваше да е inch ако в условието беше  39.3700787 inches (inch). Аналогично и за втория switch.

 

 

0
07/09/2019 20:16:13
knoteva avatar knoteva 1081 Точки

Ако напишеш case "inch": result = value / inch; break; никога няма да влезне в този кей, защото judge го дава като "in".

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