Loading...
stambo avatar stambo 6 Точки

Помощ със задача - Metric Converter

Здравейте!Като цяло не съм студент в софтуни, защото все още съм ученик и не знам дали имам право да участвам във форумите.Наскоро почнах да се упражнявам и да решавам задачите от лекциите.Става въпрос за задачата Metric converter/Конвертор за мерни единици от лецкията "Логически проверки" - Programming Basics.Успях да я реша горе долу, но не ми дава пълен брой точки в judge-a и бих се радвал, ако ми обясните защо laugh Това е кодът ми:

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

namespace METRIC_CONVERTER
{
    class Program
    {
        static void Main(string[] args)
        {
            double numbersToConvert = double.Parse(Console.ReadLine());

            string firstNumber = Console.ReadLine();
            string secondNumber = Console.ReadLine();

            var currencies = new Dictionary<string, double>()
            {
                {"mm", 1000 },
                {"cm", 100 },
                {"mi", 0.000621371192},
                {"in", 39.3700787},
                {"km", 0.001},
                {"ft", 3.2808399},
                {"yd", 1.0936133}
            };

            double result = numbersToConvert / currencies[firstNumber] * currencies[secondNumber];
        
            Console.WriteLine("{0} {1}",result,secondNumber);

        }
    }
}

 

Този метод е просто доста бавен или някъде имам грешка в задачата?

 

1
Programming Basics
petar.dimitrov.86 avatar petar.dimitrov.86 450 Точки
Best Answer

Забравил си да добавиш  {"m", 1},

1
stambo avatar stambo 6 Точки

Леле, направо ги забравих тези метри :D сега ми дава 100 точки.Благодаря много!

0
InaPanova avatar InaPanova 28 Точки

Решението на тази задача е супер. "Dictionary" е някакъв метод предполагам? Моят код по тази задача излезе 350 реда (с if - else конструкцията, а мой приятел го направи със switch) - наистина жалко, че за ред не се плаща :D 

2
H.Stoyanov avatar H.Stoyanov 115 Точки

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

1
stambo avatar stambo 6 Точки

Затова попитах във форума, защото в снимката(ще я закача по-долу) показва само "Грешка по време на изпълнение" и се зачудих къде е грешката...напълно бях забравил да добавя метрите, извинявам се.

0
26/02/2016 11:47:06
petar.dimitrov.86 avatar petar.dimitrov.86 450 Точки

Да, малко странно, че на тази задача не показва джъджа какъв input подава и какъв оutput oчаква, обикновено винаги си има допълнителна информация :) Освен препоръките, които колегата написа, мога да добавя, че е хубаво така в началото като не разбереш къде точно ти е грешката, и защо не ти дава максимума, да се пробваш известно време сам да отстраниш грешката, защото на изпита мисля, че джъджа няма да показва къде ти е грешката, така че може от сега да се тренираш да не разчиташ винаги на джъджа :) В началото, разбира се, когато още не си много навътре в материала е нормално да си помагаш с джъжда. Но иначе браво, че си направил задачката с речник, вместо switch-case, той речника не се учи май по времето на Programming Basics :)

1
Xapuu avatar Xapuu 25 Точки

Докато сме на темата Metric Converter, някой ако може да хвърли една око защо това решение не работи - http://pastebin.com/rT2NuQ2m , ще съм много благодарен.

0
Filkolev avatar Filkolev 4482 Точки

Обясни по-подробно как точно не работи.

На пръв поглед ми се струва, че имаш проблем с типовете данни за някои променливи, някои са int, други double. Обърни по-специално внимание на mm и cm, те винаги са 0, което едва ли е това, което очакваш.

0
b.serafimov avatar b.serafimov -5 Точки

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

Плюс тея неща за типовете ;)

0
nakov avatar nakov SoftUni Team Trainer 5295 Точки

Промених в judge системата да се показва входът на тестовете за тази задача. Бях забравил да цъкна един checkbox.

Наков

2
StefanBebrevski avatar StefanBebrevski 0 Точки

Открих я !! В условието не се иска извеждане на мерната единица

Колеги, имам нужда от малко съдействие. Реших задачата със switch case метода, но judgе-а я оценява 0/100. Някой може ли каже къде е грешката, защото аз не виждам нищо нередно. Благодаря много !

 

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

namespace Metric_Converter
{
    class Program
    {
        static void Main(string[] args)
        {
            var number = double.Parse(Console.ReadLine());
            var input = Console.ReadLine();
            var output = Console.ReadLine();


            switch (input)
            {
                case "m": ; break;
                case "mm": number = number / 1000; break;
                case "cm": number = number / 100; break;
                case "mi": number = number / 0.000621371192; break;
                case "in": number = number / 39.3700787; break;
                case "km": number = number / 0.001; break;
                case "ft": number = number / 3.2808399; break;
                case "yd": number = number / 1.0936133; break;
                default: ; break;
            }
            switch (output)
            {
                case "m": number = number * 1; break;
                case "mm": number = number * 1000; break;
                case "cm": number = number * 100; break;
                case "mi": number = number * 0.000621371192; break;
                case "in": number = number * 39.3700787; break;
                case "km": number = number * 0.001; break;
                case "ft": number = number * 3.2808399; break;
                case "yd": number = number * 1.0936133; break;
                default: ; break;
            }
            Console.WriteLine(number + output);
        }
    }
}

 

0
30/03/2017 20:23:46
snakera avatar snakera 10 Точки

всичко си е наред с кода пробвай да промениш последният ред,когато печаташ на конзолата,там ти е грешката

аз го написах така "Console.WriteLine("{0} {1}",number,output);" и ми дава 100/100 с твоят код ;)

0
IvanVillani avatar IvanVillani 2 Точки

Eto tova raboti v judge!!!!!!

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

namespace MetricConvertor
{
    class Program
    {
        static void Main(string[] args)
        {
            var sum = double.Parse(Console.ReadLine());
            var from = Console.ReadLine();
            var to = Console.ReadLine();

            var meter = 0.0;

            if (from == "m" )
            {
                meter = sum;
            }
            else if (from == "mm")
            {
                meter = sum / 1000;
            }
            else if (from == "cm")
            {
                meter = sum / 100;
            }
            else if (from == "mi")
            {
                meter = sum / 0.000621371192;
            }
            else if (from == "in")
            {
                meter = sum / 39.3700787;
            }
            else if (from == "km")
            {
                meter = sum / 0.001;
            }
            else if (from == "ft")
            {
                meter = sum / 3.2808399;
            }
            else if (from == "yd")
            {
                meter = sum / 1.0936133;
            }


            if (to == "m")
            {
                meter = meter * 1;
            }
            else if (to == "mm")
            {
                meter = meter * 1000;
            }
            else if (to == "cm")
            {
                meter = meter * 100;
            }
            else if (to == "mi")
            {
                meter = meter * 0.000621371192;
            }
            else if (to == "in")
            {
                meter = meter * 39.3700787;
            }
            else if (to == "km")
            {
                meter = meter * 0.001;
            }
            else if (to == "ft")
            {
                meter = meter * 3.2808399;
            }
            else if (to == "yd")
            {
                meter = meter * 1.0936133;
            }

            Console.WriteLine(string.Format("{0:F8}", meter));

        }
    }
}
 

0
simona_st avatar simona_st 38 Точки

Мисля че има мъничка математическа грешка в решението на IvanVillani, но иначе много ми помогна !!!


Май трябва да е 

 else if (from == "ft")
            {
                meter = sum* 0.3048;
}

вместо 

 

else if (from == "ft")
            {
                meter = sum / 3.2808399;
}

 

Също мисля че има малка грешка в условието на задачата (при данните за проверка). 12 km са 39370.07880000 ft, а не 39370. 07886932. В judge обаче си е наред.  

 

 

0
IvanVillani avatar IvanVillani 2 Точки

За това и аз се зачудих и го правих доста пъти, но не ставаше затова промених малко нещата по този (за мен не чак толкова точен начин) и се поличучи в judge!! Благодаря за забележката, знаех си, че ще я посочи някой!!:)

0
Iv.St avatar Iv.St 8 Точки

малко дълго , но като понапреднем ще може и по просто :D

https://pastebin.com/zwWY2s0y

0
ShadowMoses avatar ShadowMoses 1 Точки

Ето го моето решение. Направих го възможно най-четливо и кратко.

https://pastebin.com/P54CJJfH

0
StelaChilikova avatar StelaChilikova 19 Точки

Ето и моето решение доста е дълго, но съм много доволна. Размърдах си мозъка и измислих логиката само с това което сме взели.

https://pastebin.com/LghUsDC0 

надявам се така да се прави и да може да се види :)

0
ShadowMoses avatar ShadowMoses 1 Точки

Така също става, но отнема страшно много време. Затова switch/case е по-добрият вариянт. Пробвай се да я решиш с него и ще видиш разликата във времето и усилията. Поздрави! (:

0
StelaChilikova avatar StelaChilikova 19 Точки

Благодаря :) Да предполагам има доста по кратки варианти, но гледам лекцийте on-line и съм само до Условни конструкции затова и я реших сама и с това което знам :) Отне ми време и 6 грешни решения :D но се чувствам удовлетворена :) 

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